{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ch 5. Interactive Data Analysis\n",
    "\n",
    "This notebook introduces carrying out interactive data analysis of data in BigQuery using a Jupyter Notebook managed by Vertex AI Workbench.\n",
    "\n",
    "This cell, for example, is a mark-down cell.  Which is why you are seeing text. The cell that follows is a Python code cell. The output of that cell is whatever is printed out from it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a=3 b=8\n"
     ]
    }
   ],
   "source": [
    "a = 3\n",
    "b = a + 5\n",
    "print(\"a={} b={}\".format(a,b))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Relative path\n",
    "\n",
    "I created this notebook in 05_bqnotebook folder of the git repo for the book. So, you might see a path that ends in that. But the path will start with /home/jupyter which is mapped to a local folder if you are running this in a container."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/home/jupyter/data-science-on-gcp/05_bqnotebook\n"
     ]
    }
   ],
   "source": [
    "!pwd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## What's installed?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "absl-py @ file:///home/conda/feedstock_root/build_artifacts/absl-py_1637088766493/work\n",
      "aiohttp @ file:///home/conda/feedstock_root/build_artifacts/aiohttp_1637087016127/work\n",
      "aiosignal @ file:///home/conda/feedstock_root/build_artifacts/aiosignal_1636093929600/work\n",
      "ansiwrap==0.8.4\n",
      "anyio @ file:///home/conda/feedstock_root/build_artifacts/anyio_1641898037838/work/dist\n",
      "apache-beam==2.36.0\n",
      "appdirs @ file:///home/conda/feedstock_root/build_artifacts/appdirs_1603108395799/work\n",
      "argon2-cffi @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi_1640817743617/work\n",
      "argon2-cffi-bindings @ file:///home/conda/feedstock_root/build_artifacts/argon2-cffi-bindings_1640855138034/work\n",
      "arrow @ file:///home/conda/feedstock_root/build_artifacts/arrow_1643313750486/work\n",
      "asn1crypto @ file:///home/conda/feedstock_root/build_artifacts/asn1crypto_1595949944546/work\n",
      "astunparse==1.6.3\n",
      "async-timeout @ file:///home/conda/feedstock_root/build_artifacts/async-timeout_1640026696943/work\n",
      "asynctest==0.13.0\n",
      "attrs @ file:///home/conda/feedstock_root/build_artifacts/attrs_1640799537051/work\n",
      "Babel @ file:///home/conda/feedstock_root/build_artifacts/babel_1619719576210/work\n",
      "backcall @ file:///home/conda/feedstock_root/build_artifacts/backcall_1592338393461/work\n",
      "backports.functools-lru-cache @ file:///home/conda/feedstock_root/build_artifacts/backports.functools_lru_cache_1618230623929/work\n",
      "beatrix-jupyterlab @ file:///tmp/beatrix_jupyterlab-latest.tar.gz\n",
      "binaryornot==0.4.4\n",
      "black @ file:///home/conda/feedstock_root/build_artifacts/black-recipe_1643636307408/work\n",
      "bleach @ file:///home/conda/feedstock_root/build_artifacts/bleach_1629908509068/work\n",
      "blinker==1.4\n",
      "Bottleneck @ file:///home/conda/feedstock_root/build_artifacts/bottleneck_1645538059630/work\n",
      "brotlipy==0.7.0\n",
      "cached-property==1.5.2\n",
      "cachetools==4.2.4\n",
      "certifi==2021.10.8\n",
      "cffi @ file:///home/conda/feedstock_root/build_artifacts/cffi_1636046052501/work\n",
      "chardet @ file:///tmp/build/80754af9/chardet_1607706768982/work\n",
      "charset-normalizer @ file:///home/conda/feedstock_root/build_artifacts/charset-normalizer_1644853463426/work\n",
      "click @ file:///home/conda/feedstock_root/build_artifacts/click_1645238117885/work\n",
      "cloud-tpu-client==0.10\n",
      "cloud-tpu-profiler==2.4.0\n",
      "cloudml-hypertune==0.1.0.dev6\n",
      "cloudpickle @ file:///home/conda/feedstock_root/build_artifacts/cloudpickle_1631273254894/work\n",
      "colorama @ file:///home/conda/feedstock_root/build_artifacts/colorama_1602866480661/work\n",
      "conda==4.11.0\n",
      "conda-package-handling @ file:///tmp/build/80754af9/conda-package-handling_1618262151086/work\n",
      "confuse @ file:///home/conda/feedstock_root/build_artifacts/confuse_1638044079768/work\n",
      "cookiecutter @ file:///home/conda/feedstock_root/build_artifacts/cookiecutter_1643669229020/work\n",
      "crcmod==1.7\n",
      "cryptography @ file:///home/conda/feedstock_root/build_artifacts/cryptography_1639699266208/work\n",
      "cycler @ file:///home/conda/feedstock_root/build_artifacts/cycler_1635519461629/work\n",
      "dataclasses @ file:///home/conda/feedstock_root/build_artifacts/dataclasses_1628958434797/work\n",
      "debugpy @ file:///home/conda/feedstock_root/build_artifacts/debugpy_1636043256745/work\n",
      "decorator @ file:///home/conda/feedstock_root/build_artifacts/decorator_1641555617451/work\n",
      "defusedxml @ file:///home/conda/feedstock_root/build_artifacts/defusedxml_1615232257335/work\n",
      "Deprecated==1.2.13\n",
      "dill==0.3.4\n",
      "distlib==0.3.4\n",
      "dm-tree==0.1.6\n",
      "docker @ file:///home/conda/feedstock_root/build_artifacts/docker-py_1638897274897/work\n",
      "docker-pycreds==0.4.0\n",
      "docopt==0.6.2\n",
      "docstring-parser==0.13\n",
      "entrypoints @ file:///home/conda/feedstock_root/build_artifacts/entrypoints_1643888246732/work\n",
      "explainable-ai-sdk @ file:///opt/conda/conda-bld/dlenv-tf-2-8-cpu_1645925758554/work/explainable_ai_sdk-1-py3-none-any.whl\n",
      "explainers @ file:///opt/conda/conda-bld/dlenv-tf-2-8-cpu_1645925758554/work/explainers-1-cp37-cp37m-linux_x86_64.whl\n",
      "fastavro==1.4.9\n",
      "fasteners==0.17.3\n",
      "filelock==3.6.0\n",
      "fire==0.4.0\n",
      "flatbuffers==2.0\n",
      "flit_core @ file:///home/conda/feedstock_root/build_artifacts/flit-core_1645629044586/work/source/flit_core\n",
      "fonttools @ file:///home/conda/feedstock_root/build_artifacts/fonttools_1643722425517/work\n",
      "frozenlist @ file:///home/conda/feedstock_root/build_artifacts/frozenlist_1643222566314/work\n",
      "fsspec @ file:///home/conda/feedstock_root/build_artifacts/fsspec_1645566723803/work\n",
      "future==0.18.2\n",
      "gast==0.5.3\n",
      "gcsfs @ file:///home/conda/feedstock_root/build_artifacts/gcsfs_1645586049768/work\n",
      "gitdb @ file:///home/conda/feedstock_root/build_artifacts/gitdb_1635085722655/work\n",
      "GitPython @ file:///home/conda/feedstock_root/build_artifacts/gitpython_1645531658201/work\n",
      "google-api-core @ file:///home/conda/feedstock_root/build_artifacts/google-api-core-split_1644877687275/work\n",
      "google-api-python-client==1.12.10\n",
      "google-apitools==0.5.31\n",
      "google-auth==1.35.0\n",
      "google-auth-httplib2 @ file:///home/conda/feedstock_root/build_artifacts/google-auth-httplib2_1617387471894/work\n",
      "google-auth-oauthlib @ file:///home/conda/feedstock_root/build_artifacts/google-auth-oauthlib_1630497468950/work\n",
      "google-cloud-aiplatform==1.10.0\n",
      "google-cloud-appengine-logging==1.1.0\n",
      "google-cloud-audit-log==0.2.0\n",
      "google-cloud-bigquery==2.34.0\n",
      "google-cloud-bigquery-storage==2.12.0\n",
      "google-cloud-bigtable==2.5.2\n",
      "google-cloud-core @ file:///home/conda/feedstock_root/build_artifacts/google-cloud-core_1642607638110/work\n",
      "google-cloud-dataproc==3.3.0\n",
      "google-cloud-datastore==2.4.0\n",
      "google-cloud-dlp==3.6.0\n",
      "google-cloud-firestore==2.3.4\n",
      "google-cloud-kms==2.11.0\n",
      "google-cloud-language==2.3.2\n",
      "google-cloud-logging==3.0.0\n",
      "google-cloud-monitoring==2.8.0\n",
      "google-cloud-pubsub==2.9.0\n",
      "google-cloud-pubsublite==1.4.0\n",
      "google-cloud-recommendations-ai==0.2.0\n",
      "google-cloud-scheduler==2.6.0\n",
      "google-cloud-spanner==3.13.0\n",
      "google-cloud-speech==2.12.0\n",
      "google-cloud-storage==1.44.0\n",
      "google-cloud-tasks==2.8.0\n",
      "google-cloud-translate==3.7.0\n",
      "google-cloud-videointelligence==2.6.0\n",
      "google-cloud-vision==2.6.3\n",
      "google-crc32c @ file:///home/conda/feedstock_root/build_artifacts/google-crc32c_1636020892126/work\n",
      "google-pasta==0.2.0\n",
      "google-resumable-media @ file:///home/conda/feedstock_root/build_artifacts/google-resumable-media_1635195007097/work\n",
      "googleapis-common-protos @ file:///home/conda/feedstock_root/build_artifacts/googleapis-common-protos-feedstock_1641396310439/work\n",
      "greenlet @ file:///home/conda/feedstock_root/build_artifacts/greenlet_1635836788663/work\n",
      "grpc-google-iam-v1==0.12.3\n",
      "grpcio @ file:///home/conda/feedstock_root/build_artifacts/grpcio_1645230326358/work\n",
      "grpcio-gcp @ file:///home/conda/feedstock_root/build_artifacts/grpcio-gcp_1635875856259/work\n",
      "grpcio-status==1.44.0\n",
      "gviz-api==1.10.0\n",
      "h5py==3.6.0\n",
      "hdfs==2.6.0\n",
      "horovod==0.23.0\n",
      "htmlmin==0.1.12\n",
      "httplib2 @ file:///home/conda/feedstock_root/build_artifacts/httplib2_1644593570376/work\n",
      "idna @ file:///home/conda/feedstock_root/build_artifacts/idna_1642433548627/work\n",
      "ImageHash @ file:///home/conda/feedstock_root/build_artifacts/imagehash_1626361020540/work\n",
      "imageio==2.16.0\n",
      "importlib-metadata @ file:///home/conda/feedstock_root/build_artifacts/importlib-metadata_1644934521437/work\n",
      "importlib-resources @ file:///home/conda/feedstock_root/build_artifacts/importlib_resources_1635615662634/work\n",
      "ipykernel @ file:///home/conda/feedstock_root/build_artifacts/ipykernel_1644979796763/work/dist/ipykernel-6.9.1-py3-none-any.whl\n",
      "ipython @ file:///home/conda/feedstock_root/build_artifacts/ipython_1645888813068/work\n",
      "ipython-genutils==0.2.0\n",
      "ipython-sql @ file:///home/conda/feedstock_root/build_artifacts/ipython-sql_1636816912182/work\n",
      "ipywidgets @ file:///home/conda/feedstock_root/build_artifacts/ipywidgets_1631590360471/work\n",
      "jedi @ file:///home/conda/feedstock_root/build_artifacts/jedi_1637175076767/work\n",
      "jeepney==0.7.1\n",
      "Jinja2 @ file:///home/conda/feedstock_root/build_artifacts/jinja2_1612119311452/work\n",
      "jinja2-time==0.2.0\n",
      "joblib @ file:///home/conda/feedstock_root/build_artifacts/joblib_1612898609989/work\n",
      "json5 @ file:///home/conda/feedstock_root/build_artifacts/json5_1600692310011/work\n",
      "jsonschema==3.2.0\n",
      "jupyter==1.0.0\n",
      "jupyter-client @ file:///home/conda/feedstock_root/build_artifacts/jupyter_client_1642858610849/work\n",
      "jupyter-console==6.4.0\n",
      "jupyter-core @ file:///home/conda/feedstock_root/build_artifacts/jupyter_core_1645024288521/work\n",
      "jupyter-http-over-ws==0.0.8\n",
      "jupyter-server @ file:///home/conda/feedstock_root/build_artifacts/jupyter_server_1644505208279/work\n",
      "jupyter-server-mathjax @ file:///home/conda/feedstock_root/build_artifacts/jupyter-server-mathjax_1645541128695/work\n",
      "jupyter-server-proxy @ file:///home/conda/feedstock_root/build_artifacts/jupyter-server-proxy_1643080298941/work\n",
      "jupyterlab @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_1643984239174/work\n",
      "jupyterlab-git @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab-git_1642185789282/work\n",
      "jupyterlab-pygments @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_pygments_1601375948261/work\n",
      "jupyterlab-server @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_server_1641592475363/work\n",
      "jupyterlab-widgets @ file:///home/conda/feedstock_root/build_artifacts/jupyterlab_widgets_1631590465624/work\n",
      "jupytext @ file:///home/conda/feedstock_root/build_artifacts/jupytext_1644914976718/work\n",
      "keras==2.8.0rc0\n",
      "Keras-Preprocessing==1.1.2\n",
      "keras-tuner==1.1.0\n",
      "keyring==23.5.0\n",
      "keyrings.google-artifactregistry-auth==1.0.0\n",
      "kfp==1.8.11\n",
      "kfp-pipeline-spec==0.1.13\n",
      "kfp-server-api==1.8.1\n",
      "kiwisolver @ file:///home/conda/feedstock_root/build_artifacts/kiwisolver_1635836699543/work\n",
      "kt-legacy==1.0.4\n",
      "kubernetes==18.20.0\n",
      "libclang==13.0.0\n",
      "libcst==0.4.1\n",
      "llvmlite==0.38.0\n",
      "Markdown @ file:///home/conda/feedstock_root/build_artifacts/markdown_1637220118004/work\n",
      "markdown-it-py @ file:///home/conda/feedstock_root/build_artifacts/markdown-it-py_1620659057741/work\n",
      "MarkupSafe @ file:///home/conda/feedstock_root/build_artifacts/markupsafe_1635833550185/work\n",
      "matplotlib @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-suite_1639358971400/work\n",
      "matplotlib-inline @ file:///home/conda/feedstock_root/build_artifacts/matplotlib-inline_1631080358261/work\n",
      "mdit-py-plugins @ file:///home/conda/feedstock_root/build_artifacts/mdit-py-plugins_1639763187273/work\n",
      "missingno==0.4.2\n",
      "mistune @ file:///home/conda/feedstock_root/build_artifacts/mistune_1635844677043/work\n",
      "multidict @ file:///home/conda/feedstock_root/build_artifacts/multidict_1643055370770/work\n",
      "multimethod @ file:///home/conda/feedstock_root/build_artifacts/multimethod_1603129052241/work\n",
      "munkres==1.1.4\n",
      "mypy-extensions @ file:///home/conda/feedstock_root/build_artifacts/mypy_extensions_1635839681723/work\n",
      "nb-conda @ file:///home/conda/feedstock_root/build_artifacts/nb_conda_1611345550379/work\n",
      "nb-conda-kernels @ file:///home/conda/feedstock_root/build_artifacts/nb_conda_kernels_1636999991206/work\n",
      "nbclassic @ file:///home/conda/feedstock_root/build_artifacts/nbclassic_1641934401341/work\n",
      "nbclient @ file:///home/conda/feedstock_root/build_artifacts/nbclient_1644884378444/work\n",
      "nbconvert @ file:///home/conda/feedstock_root/build_artifacts/nbconvert_1644591272508/work\n",
      "nbdime @ file:///home/conda/feedstock_root/build_artifacts/nbdime_1635269257164/work\n",
      "nbformat @ file:///home/conda/feedstock_root/build_artifacts/nbformat_1617383142101/work\n",
      "nest-asyncio @ file:///home/conda/feedstock_root/build_artifacts/nest-asyncio_1638419302549/work\n",
      "networkx @ file:///home/conda/feedstock_root/build_artifacts/networkx_1635253012265/work\n",
      "notebook @ file:///home/conda/feedstock_root/build_artifacts/notebook_1643149609895/work\n",
      "notebook-executor @ file:///opt/conda/conda-bld/dlenv-base_1645923907312/work/packages/notebook_executor\n",
      "numba @ file:///home/conda/feedstock_root/build_artifacts/numba_1644003856013/work\n",
      "numpy==1.21.5\n",
      "oauth2client==4.1.3\n",
      "oauthlib @ file:///home/conda/feedstock_root/build_artifacts/oauthlib_1643507977997/work\n",
      "opt-einsum==3.3.0\n",
      "orjson==3.6.7\n",
      "overrides==6.1.0\n",
      "packaging @ file:///home/conda/feedstock_root/build_artifacts/packaging_1637239678211/work\n",
      "pandas==1.3.5\n",
      "pandas-profiling @ file:///home/conda/feedstock_root/build_artifacts/pandas-profiling_1632836752399/work\n",
      "pandocfilters @ file:///home/conda/feedstock_root/build_artifacts/pandocfilters_1631603243851/work\n",
      "papermill @ file:///home/conda/feedstock_root/build_artifacts/papermill_1642949624634/work\n",
      "parso @ file:///home/conda/feedstock_root/build_artifacts/parso_1638334955874/work\n",
      "pathspec @ file:///home/conda/feedstock_root/build_artifacts/pathspec_1626613672358/work\n",
      "patsy @ file:///home/conda/feedstock_root/build_artifacts/patsy_1632667180946/work\n",
      "pexpect @ file:///home/conda/feedstock_root/build_artifacts/pexpect_1602535608087/work\n",
      "phik @ file:///home/conda/feedstock_root/build_artifacts/phik_1636795276417/work\n",
      "pickleshare @ file:///home/conda/feedstock_root/build_artifacts/pickleshare_1602536217715/work\n",
      "Pillow @ file:///home/conda/feedstock_root/build_artifacts/pillow_1645323161513/work\n",
      "platformdirs @ file:///home/conda/feedstock_root/build_artifacts/platformdirs_1645298319244/work\n",
      "pluggy==1.0.0\n",
      "poyo==0.5.0\n",
      "prettytable @ file:///home/conda/feedstock_root/build_artifacts/prettytable_1645048701962/work\n",
      "prometheus-client @ file:///home/conda/feedstock_root/build_artifacts/prometheus_client_1643395600215/work\n",
      "promise==2.3\n",
      "prompt-toolkit @ file:///home/conda/feedstock_root/build_artifacts/prompt-toolkit_1644497866770/work\n",
      "proto-plus==1.20.3\n",
      "protobuf==3.19.4\n",
      "psutil==5.9.0\n",
      "ptyprocess @ file:///home/conda/feedstock_root/build_artifacts/ptyprocess_1609419310487/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl\n",
      "pyarrow==7.0.0\n",
      "pyasn1==0.4.8\n",
      "pyasn1-modules==0.2.7\n",
      "pycosat==0.6.3\n",
      "pycparser @ file:///home/conda/feedstock_root/build_artifacts/pycparser_1636257122734/work\n",
      "pydantic @ file:///home/conda/feedstock_root/build_artifacts/pydantic_1641053086857/work\n",
      "pydot==1.4.2\n",
      "Pygments @ file:///home/conda/feedstock_root/build_artifacts/pygments_1641580240686/work\n",
      "PyJWT @ file:///home/conda/feedstock_root/build_artifacts/pyjwt_1638819640841/work\n",
      "pymongo==3.12.3\n",
      "pyOpenSSL @ file:///home/conda/feedstock_root/build_artifacts/pyopenssl_1643496850550/work\n",
      "pyparsing @ file:///home/conda/feedstock_root/build_artifacts/pyparsing_1642753572664/work\n",
      "pyrsistent @ file:///home/conda/feedstock_root/build_artifacts/pyrsistent_1642534376236/work\n",
      "PySocks @ file:///tmp/build/80754af9/pysocks_1594394576006/work\n",
      "python-dateutil @ file:///home/conda/feedstock_root/build_artifacts/python-dateutil_1626286286081/work\n",
      "python-slugify @ file:///home/conda/feedstock_root/build_artifacts/python-slugify_1645567164813/work\n",
      "pytz @ file:///home/conda/feedstock_root/build_artifacts/pytz_1633452062248/work\n",
      "pyu2f @ file:///home/conda/feedstock_root/build_artifacts/pyu2f_1604248910016/work\n",
      "PyWavelets @ file:///home/conda/feedstock_root/build_artifacts/pywavelets_1638209732773/work\n",
      "PyYAML==5.4.1\n",
      "pyzmq @ file:///home/conda/feedstock_root/build_artifacts/pyzmq_1635877395563/work\n",
      "qtconsole==5.2.2\n",
      "QtPy==2.0.1\n",
      "requests @ file:///home/conda/feedstock_root/build_artifacts/requests_1641580202195/work\n",
      "requests-oauthlib @ file:///home/conda/feedstock_root/build_artifacts/requests-oauthlib_1643557462909/work\n",
      "requests-toolbelt==0.9.1\n",
      "retrying==1.3.3\n",
      "rsa @ file:///home/conda/feedstock_root/build_artifacts/rsa_1637781155505/work\n",
      "ruamel-yaml-conda @ file:///tmp/build/80754af9/ruamel_yaml_1616016701961/work\n",
      "scikit-image==0.19.2\n",
      "scikit-learn @ file:///home/conda/feedstock_root/build_artifacts/scikit-learn_1640464152916/work\n",
      "scipy @ file:///home/conda/feedstock_root/build_artifacts/scipy_1637806658031/work\n",
      "seaborn @ file:///home/conda/feedstock_root/build_artifacts/seaborn-split_1629095986539/work\n",
      "SecretStorage==3.3.1\n",
      "Send2Trash @ file:///home/conda/feedstock_root/build_artifacts/send2trash_1628511208346/work\n",
      "simpervisor @ file:///home/conda/feedstock_root/build_artifacts/simpervisor_1609865618711/work\n",
      "six @ file:///tmp/build/80754af9/six_1623709665295/work\n",
      "smmap @ file:///home/conda/feedstock_root/build_artifacts/smmap_1611376390914/work\n",
      "sniffio @ file:///home/conda/feedstock_root/build_artifacts/sniffio_1635844655971/work\n",
      "SQLAlchemy @ file:///home/conda/feedstock_root/build_artifacts/sqlalchemy_1642761928857/work\n",
      "sqlparse @ file:///home/conda/feedstock_root/build_artifacts/sqlparse_1631317292236/work\n",
      "statsmodels @ file:///home/conda/feedstock_root/build_artifacts/statsmodels_1644535599043/work\n",
      "strip-hints==0.1.10\n",
      "tabulate==0.8.9\n",
      "tangled-up-in-unicode @ file:///home/conda/feedstock_root/build_artifacts/tangled-up-in-unicode_1620720635379/work\n",
      "tenacity @ file:///home/conda/feedstock_root/build_artifacts/tenacity_1626090218611/work\n",
      "tensorboard==2.7.0\n",
      "tensorboard-data-server==0.6.1\n",
      "tensorboard-plugin-profile==2.5.0\n",
      "tensorboard-plugin-wit==1.8.1\n",
      "tensorflow @ file:///opt/conda/conda-bld/dlenv-tf-2-8-cpu_1645925758554/work/tensorflow-2.8.0-cp37-cp37m-linux_x86_64.whl\n",
      "tensorflow-cloud==0.1.16\n",
      "tensorflow-datasets==4.4.0\n",
      "tensorflow-estimator==2.8.0\n",
      "tensorflow-hub==0.12.0\n",
      "tensorflow-io==0.23.1\n",
      "tensorflow-io-gcs-filesystem==0.24.0\n",
      "tensorflow-metadata==1.6.0\n",
      "tensorflow-probability==0.14.1\n",
      "tensorflow-serving-api==2.7.0\n",
      "tensorflow-transform==1.6.0\n",
      "termcolor==1.1.0\n",
      "terminado @ file:///home/conda/feedstock_root/build_artifacts/terminado_1643296485362/work\n",
      "testpath @ file:///home/conda/feedstock_root/build_artifacts/testpath_1645693042223/work\n",
      "text-unidecode==1.3\n",
      "textwrap3==0.9.2\n",
      "tf-estimator-nightly==2.8.0.dev2021122109\n",
      "tfx-bsl==1.6.0\n",
      "threadpoolctl @ file:///home/conda/feedstock_root/build_artifacts/threadpoolctl_1643647933166/work\n",
      "tifffile==2021.11.2\n",
      "toml @ file:///home/conda/feedstock_root/build_artifacts/toml_1604308577558/work\n",
      "tomli @ file:///home/conda/feedstock_root/build_artifacts/tomli_1644342247877/work\n",
      "tornado @ file:///home/conda/feedstock_root/build_artifacts/tornado_1635819587639/work\n",
      "tqdm @ file:///home/conda/feedstock_root/build_artifacts/tqdm_1632160078689/work\n",
      "traitlets @ file:///home/conda/feedstock_root/build_artifacts/traitlets_1635260543454/work\n",
      "typed-ast @ file:///home/conda/feedstock_root/build_artifacts/typed-ast_1643045769112/work\n",
      "typer==0.4.0\n",
      "typing-extensions==3.10.0.2\n",
      "typing-inspect==0.7.1\n",
      "typing-utils==0.1.0\n",
      "ujson @ file:///home/conda/feedstock_root/build_artifacts/ujson_1640095826149/work\n",
      "unicodedata2 @ file:///home/conda/feedstock_root/build_artifacts/unicodedata2_1640030998004/work\n",
      "Unidecode @ file:///home/conda/feedstock_root/build_artifacts/unidecode_1645371071762/work\n",
      "uritemplate==3.0.1\n",
      "urllib3 @ file:///home/conda/feedstock_root/build_artifacts/urllib3_1641584929973/work\n",
      "virtualenv==20.13.2\n",
      "visions @ file:///home/conda/feedstock_root/build_artifacts/visions_1632831254311/work\n",
      "wcwidth @ file:///home/conda/feedstock_root/build_artifacts/wcwidth_1600965781394/work\n",
      "webencodings==0.5.1\n",
      "websocket-client @ file:///home/conda/feedstock_root/build_artifacts/websocket-client_1645884408572/work\n",
      "Werkzeug==2.0.3\n",
      "widgetsnbextension @ file:///home/conda/feedstock_root/build_artifacts/widgetsnbextension_1637174133839/work\n",
      "witwidget==1.8.0\n",
      "wrapt @ file:///home/conda/feedstock_root/build_artifacts/wrapt_1635836382399/work\n",
      "xai-tabular-widget @ file:///opt/conda/conda-bld/dlenv-tf-2-8-cpu_1645925758554/work/xai_tabular_widget-1-py3-none-any.whl\n",
      "yarl @ file:///home/conda/feedstock_root/build_artifacts/yarl_1636046815749/work\n",
      "zipp @ file:///home/conda/feedstock_root/build_artifacts/zipp_1643828507773/work\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip freeze"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "from google.cloud import bigquery"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Installing dependencies\n",
    "\n",
    "Regular Python dependencies can be installed using pip"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: pytz in /opt/conda/lib/python3.7/site-packages (2021.3)\n",
      "Note: you may need to restart the kernel to use updated packages.\n"
     ]
    }
   ],
   "source": [
    "%pip install pytz"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Juypter magic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "This cell will print out a <b> HTML </b> string.\n"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%%html\n",
    "This cell will print out a <b> HTML </b> string."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The `%%bigquery` cell magic will return SQL results in a Pandas DataFrame:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 737.27query/s] \n",
      "Downloading: 100%|██████████| 1/1 [00:01<00:00,  1.34s/rows]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>frac_delayed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.185803</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   frac_delayed\n",
       "0      0.185803"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT \n",
    "  COUNTIF(arr_delay >= 15)/COUNT(arr_delay) AS frac_delayed\n",
    "FROM dsongcp.flights_tzcorr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calls to BigQuery\n",
    "We can also directly query BigQuery with the Python library:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "bq = bigquery.Client()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>frac_delayed</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.185803</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   frac_delayed\n",
       "0      0.185803"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sql = \"\"\"\n",
    "SELECT\n",
    "  COUNTIF(arr_delay >= 15)/COUNT(arr_delay) AS frac_delayed\n",
    "FROM dsongcp.flights_tzcorr\n",
    "\"\"\"\n",
    "bq.query(sql).to_dataframe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's draw a Probability Distribution Function (PDF) of different arrival delays. In a Notebook we can assign the output of a cell magic query to a variable, in this case `df`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 618.26query/s] \n",
      "Downloading: 100%|██████████| 6637446/6637446 [00:03<00:00, 1970068.56rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery df\n",
    "SELECT ARR_DELAY, DEP_DELAY\n",
    "FROM dsongcp.flights_tzcorr\n",
    "WHERE DEP_DELAY >= 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "pandas.core.frame.DataFrame"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "type(df)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DELAY</th>\n",
       "      <th>DEP_DELAY</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6.599852e+06</td>\n",
       "      <td>6.637446e+06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>5.113637e+01</td>\n",
       "      <td>5.598984e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>7.764071e+01</td>\n",
       "      <td>7.581221e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-8.100000e+01</td>\n",
       "      <td>1.000000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.100000e+01</td>\n",
       "      <td>1.700000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>2.900000e+01</td>\n",
       "      <td>3.200000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.400000e+01</td>\n",
       "      <td>6.500000e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.695000e+03</td>\n",
       "      <td>2.755000e+03</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          ARR_DELAY     DEP_DELAY\n",
       "count  6.599852e+06  6.637446e+06\n",
       "mean   5.113637e+01  5.598984e+01\n",
       "std    7.764071e+01  7.581221e+01\n",
       "min   -8.100000e+01  1.000000e+01\n",
       "25%    1.100000e+01  1.700000e+01\n",
       "50%    2.900000e+01  3.200000e+01\n",
       "75%    6.400000e+01  6.500000e+01\n",
       "max    2.695000e+03  2.755000e+03"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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kCEhP/7nLfHp06czfvz4M77Wr1/PzTffzLp161i5ciVJSUn89a9/BUCt5538iqI0/E/dTPSS83QLFixg+fLlvP7668yfP58vv/xS60gho5e/E70996urq/nNb37Do48+SkxMzFlvp5f8ejr+RqORlStXsmnTJnbu3Mm///3vs972YvKbzhfgrbfeOn9K4IYbbuCee+4BoF27dpSUlASvO3z4cPC3TjjRS87TJScnAxAfH8/o0aPZuXMn8fHxlJaWkpSURGlpKW3bttU45bmdLa9e/k4SEhKCl8P9ue/xePjNb37DhAkTGDNmDKCv419ffj0d/5NatWrFoEGD+OSTT0J6/Bt1OqW0tDR4ef369WRnZwOB2RP5+fm43W6KiorYt28fvXr1asxDNYmePXuyb98+ioqKcLvd5OfnM2LECK1jnVNNTQ1VVVXBy5s3byY7O5sRI0awYsUKAFasWMHIkSM1THl+Z8url+eOXp77qqry2GOPkZWVxe233x7crpfjf7b8ejn+x48fp6KiAgCn08m//vUvsrKyQnr8zzsSP5e//e1vfPfddwCkpaXx5JNPApCdnc0111zD2LFjMRqNPP744xiNxsY8VJMwmUw8/vjj3Hnnnfh8Pq6//vrgkyFcHTt2jPvuuw8InGsbP348w4YNo2fPnvznf/4nS5cuJSUlheeee07jpD/77W9/y5YtWygrK2PYsGHMnDmTu+66q9684fjcqS//li1bdPHc37ZtGytXrqRz585MnDgx+OfRy/E/W/68vDxdHP/S0lIefvhhfD4fqqpy9dVXM3z4cPr06ROy4y9L0QohhI7JOzaFEELHpMSFEELHpMSFEELHpMSFEELHpMSFEELHpMSFEELHpMSFJtatW0eXLl348ccfgcC6GL169WLixImMHTuWhx56CI/HA8AXX3xBv379mDRpEldffTWzZs06577fffddBg8ezKRJkxgzZgx33HEH27dvD17/8MMPM2LEiOAypjfddFPwfifnG5/O6/UyaNAg/ud//geATz/9lF/+8pfBt0mfXB/j1McRojlIiQtN5OXl0a9fP1avXh3c1r59e1auXMmqVasoKSlhzZo1wev69+/PihUrWLFiBRs3bmTbtm3n3P/YsWNZsWIFH3zwATNmzGDmzJnBXxgADz30ECtXrmTlypUsXLjwvHk3b95MZmYma9asQVVVcnJySE1NZenSpQDMmzePnj170rdv3ws9FEI0ipS4aHbV1dVs376dp59+mvz8/DOuNxqN9OrVq97V22w2G926dbuglekGDx7MjTfeGFzx8WLk5eVx2223kZKSwldffQUEPixi9uzZ7Nmzh/nz5/Pggw9e9P6FuFhS4qLZrV+/ntzcXDIzM2nTpg27d++uc73L5eLrr78mNzf3jPueOHGCwsJCBgwYcEGP2aNHD/bu3Rv8+dlnnw2eTvnd7353zvs6nU4+++wzhg8fzvjx44O/eJKSkpg2bRq//OUvuffee2nTps0FZRIiFKTERbPLz89n3LhxQOC0R15eHgD79+9n4sSJDBo0iNTUVLp27Rq8z9atW5kwYQJDhw7lyiuvJDEx8YIe8/TVJU49nXLyPPfZbNy4kUGDBmG32xkzZgzr1q3D5/MBcMstt+D3+4MfkydEc2vUAlhCXKiysjI+//xz9uzZg6Io+Hw+FEVhypQpwXPipaWl3HrrrXz44YfB1d369+/P7Nmz+emnn5gyZQqjR4+mW7duDX7cb7/9lk6dOl1U5vz8fLZv3x5c4bK8vJwvvviCIUOGYDAYNF+vWrRsMhIXzWrt2rVMmjSJjRs3smHDBjZt2kR6enqdc9xJSUk8+OCD9X5wdWZmJnfffTevv/56gx9zy5YtLF68mBtvvPGC81ZVVbFt2zY++ugjNmzYwIYNG3j88ceD/3sQQmsyEhfNKj8/nxkzZtTZNmbMGF599dU620aNGsULL7zA1q1bz9jHTTfdxD/+8Q+KiorIyMio93FWr17Ntm3bcDqdpKen8/zzz9cZiT/77LO88sorwZ+XLFkCwPLly+t8PulNN93E4MGDsVgswW0jR47kb3/7G263u852IbQgS9EKIYSOyekUIYTQMTmdInRr2bJlzJ07t862vn378sQTT2iUSIjmJ6dThBBCx+R0ihBC6JiUuBBC6JiUuBBC6JiUuBBC6Nj/BzpV5AW4RTgCAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.set_style(\"whitegrid\")\n",
    "# sns.set(font_scale = 1.5)\n",
    "ax = sns.violinplot(data=df, x='ARR_DELAY', inner='box', orient='h')\n",
    "ax.axes.set_xlim(-50, 300);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plotting distributions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 797.09query/s] \n",
      "Downloading: 100%|██████████| 30622371/30622371 [00:12<00:00, 2461625.10rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery df\n",
    "SELECT ARR_DELAY, DEP_DELAY\n",
    "FROM dsongcp.flights_tzcorr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DELAY</th>\n",
       "      <th>DEP_DELAY</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>3.007053e+07</td>\n",
       "      <td>3.016062e+07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>4.562742e+00</td>\n",
       "      <td>9.823851e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>4.549344e+01</td>\n",
       "      <td>4.339682e+01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-2.380000e+02</td>\n",
       "      <td>-2.340000e+02</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-1.400000e+01</td>\n",
       "      <td>-5.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-6.000000e+00</td>\n",
       "      <td>-2.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>7.000000e+00</td>\n",
       "      <td>7.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>2.695000e+03</td>\n",
       "      <td>2.755000e+03</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          ARR_DELAY     DEP_DELAY\n",
       "count  3.007053e+07  3.016062e+07\n",
       "mean   4.562742e+00  9.823851e+00\n",
       "std    4.549344e+01  4.339682e+01\n",
       "min   -2.380000e+02 -2.340000e+02\n",
       "25%   -1.400000e+01 -5.000000e+00\n",
       "50%   -6.000000e+00 -2.000000e+00\n",
       "75%    7.000000e+00  7.000000e+00\n",
       "max    2.695000e+03  2.755000e+03"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ARR_DELAY</th>\n",
       "      <th>DEP_DELAY</th>\n",
       "      <th>ontime</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>229.0</td>\n",
       "      <td>236.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>91.0</td>\n",
       "      <td>63.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>92.0</td>\n",
       "      <td>97.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>31.0</td>\n",
       "      <td>35.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>55.0</td>\n",
       "      <td>45.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   ARR_DELAY  DEP_DELAY  ontime\n",
       "0      229.0      236.0   False\n",
       "1       91.0       63.0   False\n",
       "2       92.0       97.0   False\n",
       "3       31.0       35.0   False\n",
       "4       55.0       45.0   False"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['ontime'] = df['DEP_DELAY'] < 10\n",
    "df[df['ARR_DELAY'] > 0].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAEHCAYAAABm9dtzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAzQUlEQVR4nO3deXQUZb4+8Keqt6S7Q0I6K0kMBAjEkLAIypqwoxMYEJ0gKsoyOKLAIC6/q/ccx+OcGUbv1REZLiI6ig6DGyoDSCIQQFGR1QUSSFgSEkgChGydpZfq+v3RoUlYA+nuSneezzkhlarqqm8VnX5SVW+9JciyLIOIiMgNRKULICIi/8FQISIit2GoEBGR2zBUiIjIbRgqRETkNmqlC/CEAwcOIDAwUOky2gWLxQKdTqd0Ge0C98Ul3BeXcF9cYrFY0K9fvzYtwy9DRRAEJCUlKV1Gu5CXl8d90YT74hLui0u4Ly7Jy8tr8zJ4+ouIiNyGoUJERG7DUCEiIrdhqBARkdswVIiIyG0YKkRE5DYMFSIichuGChERuQ1DhYiI3IahQkREbsNQISIit2GoEBGR2zBUiIjIbRgqRETkNgwVIiJyG4YKERG5DUOFiIjchqFCRERuw1AhIiK3YagQEZHbMFSIiMhtGCpEROQ2DBUiInIbhgoREbkNQ4WIiNyGoUJERG7DUCEiIrdhqBARkdswVIiIyG0YKuRxdXV1sNlsSpdBRF6gVroA8i9WqxXHjh3DkSNHkJeXh0OHc1F65jQC9XoMHzYMaWlpGDRoEAICApQulYg8gKFCt8zhcKC4uNgVILl5eTh+7BgkSQIACFo9rPowOGIGwGapxdYd32DLli3QanUYMmQw0tLSMHjwYBgMBoW3hIjchaFCrVZRUYG8vDwcOXIEuXl5yMvLQ0N9PQBAUGlg14fBHn47HIZwSMZwyBo9IAiu1zc6HFDVlsJaWYRvftiLnTt3QqVWY9DAQUhPT8PQoUMRHBys1OYRkRswVOiq6uvrkZ+fj7ym8Dicm4eK8+ecEwUBsj4UNkMcpIhwOAzhcAQGA8INLtGJIqTgGEjBMbDIg6Eyn4W6sgi7D/6K3bt/gCiK6NevP9LT0zB8+HCYTCbPbygRuRVDhWC323Hy5EnXaazDubk4VVQEWZadMwR0gk1vghTXzXkUojcBqja+dQQRUlAUpKAoWOLuhFhfAfWFQhzIO4YDB/bjjTfeQHJyMtLT0zFixAhERUW1fUOJyOMYKh2MLMsoKytzncY6fDgX+QX5sFmtAABBE+AMkOi+kAzhcBjCIGsCPVuUIMBhCIPVEAZr7B0QG6qgrizEryeKcOjQcixfvhw9ExMxMj0d6enpiI2N9Ww9RHTLGCp+zmw248cff2x2FJKH2ppq50RRBYfeBHvnnpAMYZAM4ZB1QS2ug3idIMCh7wyrvjOsMf0hNFZDU1mEo2eKULBqFVatWoX4rl1dAdOtWzcIStZLRC0wVPyIzWZzXQc5cuQIDh0+jLLS0ksz6DvDpo+AFJ8MyRAGR2AoILbvW5XkgGBYo1NhjU6FYDFDXVmEExVFKFq9GqtXr0Z0lxiMTE9Deno6evXqxYAhUhhDxcfJsoz8/HxkZ2djy5atqK2tAQAIOgOsgWFwxN4ByRAByWACVFqFq20bWWeELSoZtqhkCLYGqCuLUFJZiLUffYy1a9fCFBbuCpjk5GSoVCqlSybqcBgqPur8+fPYsmULNmdl4VRRESCqYAuOg737HZCMEZC1/n3vh6wJhC2iN2wRvQG7BeqqUyivLMTnX3yJdevWITgkBGkjRiA9PR39+vWDWs23OpE38DfNh1gsFuzatQubs7Kwf98+yLIMhzEC1vihsIV2A9Q6pUtUhloHe1hP2MN6okGyQV1VDFtlITZ+lYUNGzbAYDBi+PBhSEhIQEJCAnS6DrqfiLyAodLOybKMX3/9FdnZ2cjJ2Y6GhnpAZ4QlKhW2sB6QA3izYAsqDeymBNhNCWh02KGuPg1bZSG+3rYDcnY2/vneexg2dCjS0tJw5513Qq/XK10xkV9hqLRTpaWl+Prrr7E5KwtlpaUQVBpYQ+Jhu60HpKBoZVto+QpRDXvneNg7x6PRITXdzV+I7bt+QE5ODtRqDaK7RKNLdDSio6MRGRmJqKgoREVFITIyEp07d+aFf6KbxFBpR+rr67Fjxw5kZWXjl19+BgBInaJh7TYC9s5dAZVG2QJ9maiCFBwLKTgWFtkBVW051NUlOFFTjVMVxyAe+AmyzdLiJRqtFhERkegSHeUKm+ahExoaCrGdt54j8jaGisIkScLBgweRlZWFnd9847wJMTAYlpgBsJl6QNYZlS7R/wgipE7RkDpFtxwvWSFazBCsZogWM6wWMwrrzCjOPQnVz4cgWxtazK5SqxEREYEu0dEtwubisMlkYgs06nAYKgopKipCdnY2srKzcaGiAoJaB0vnbrCF9YTDEM7TW0pQaeHQhwL6UEhXmy7ZIFrNECxm1/dTDWacPnoKql/zIFvrW8wuqlQIDwtHly7RVxzlREVFISwsjK3SyO/wHe1F1dXVyMnJQVZWNo4ePQIIAuydYmDrPhL2kNsAkf8d7ZpKA0dgZyCw89VDx2GHYKmDaK11HfGUWMw4U3Aa6tx8yJa6FrOLoohQUxi6dIlGdLPQCQ8Ph9FohMFggF6vh9FohFar5fUd8gn8FPMwu92OH3/8EVlZWfj+++8hSRJkfSgscXfCbkpwdg9P/kFUQw4MhhQYfI3QkSBY6yBaal1HOqVWM8pPlOHXo8edoXOxE8/LqFQqBOr10OsNMBoNCDIaYTQaodfrYTAYWgxf60uv1/N0HHkcQ8UDZFnGsWPHkJWVha+3bEVtTTUETSAsYb1hC+sBh55dundIogpyQCdIAZ2uEToOCLY6iNY6QLJCkGwQJCsEyQpINjRIVlTabBAqrBDOlkN0lEB02AC7FbLdcs1Aak4XEAC9Xg+NRgNTaOgVR0TNhy8PLL1eD61WC61WC41Gw4Ciq2KouFFFRQW2bt2KzZuzUFh40nWXu63nIEidYtt9P1ukMFGErAuCpAu6+dfKsvNIqCmALoaRINmaAso5bJWsqJWsEKw2nDldDdFxHqLD5pzPboUs2Vq9SpVKBY1GC7VG4wobnVYLrU4LnU7nHPbgF0OtffJYqCQlJSExMdH18/Lly6/ZZXn//v1x8OBBT5XiURaLBd999x2ysrKwd+/eZne5D4EtNKHj3uVO3iUIgEoNuek5Nzc+ZrkG2XGNUGoKHlmC4JAAh9RiWJAlwCIBDRIEuR5w1EKQJYiyA4LcNN0hAQ474JAgS/Y2b7KoUjUdMamhVquavjuH1Wq1a7xGrYZarYFGo4ZKdXGaqmleNcxmM0wmU4vxzadf/Plq4y4fbj5OFEWIogiVSuUavtHPF4cvn8eXrqd5LFQCAgKwfv16Ty3+umRZht3ufNM6HA7Xw6bcOVxRUYEtW7Zg67Ztzkfq6oywRKXAbuoBR2CI17bVI2QZmnNHoK4qdn4IeIJkhWC3QlZrfbOjS1ENe0gcbOG9/aulniACah1kte7Wg6k1ZNkZYNcLqWuNcw3b0eiQmpbj/BIkB2B3NC3fDkG2XpomyxDggCA7IEBuGueA7Lj0MxzOeWXZ4VxXOyEIQrOQUUFoFjiiKEIlihBVzmli07BKFKESnWEoqpxBpRJF52sFEaIouALr4vfZs2e3uVavnf6qq6vDE088gZqaGtjtdvzxj3/E2LFjW8xz9uxZPPXUUzCbzZAkCS+99BIGDhyIXbt2YdmyZbBarYiLi8OSJUtgMFy7w8RTp05h8eLFnt4kAIBDpYMc2BmySguV+SxU5rNeWa8nCdZ6qCw1Hl1HQEAAJv52IjZu3IjG+gseXZenqKtLoCk7DFnLxhbtla2pT7hb5gqsSyHUIsSuO10GIEOQ5abhi/M5x0OWm8KsKdBcw87wu3zeS/O3nLfFsuzOoHbV4rA4g7lZYLZYdrOAhSzDDZniuVBpbGzE5MmTAQCxsbFYunQpli9fDqPRiAsXLmDatGkYM2ZMi8O6jRs3Yvjw4Zg3bx4kSUJDQwMuXLiAFStW4L333oNer8fbb7+N9957D/Pnz/dU6TdFlCxw2JzbIKu0fvFXqyBZPb6OiRMnYv78+ZBlGevWrfP4+jxFkKyQwVBpN2TXPwBk52k7a/1VQqD5z/J1pstXmf/a069Y5sUP/Obh0PShfnGc0CwUXCGDy17TIkiah4LsPKq6OG874LXTXzabDa+//jr27t0LURRRXl6O8+fPIzw83DVPSkoKXnjhBdjtdowdOxZJSUnYvn07jh07hunTp7uW069fv+uuOz4+Hjt27PDEZrnIsozc3FxkZWVhW04O6usqAZ0Bls7dYQ/z7VNgmrN5CCj6waPr2LhxI2RZxqZNmzy6Hk+zxgxwdr/f0bX2dJZDgiA7r6sIl83jGm6a9/LpV79G45xHdjT9JX7ZB6vafBY4tdsjm3zx2odKpYaoUrW4rnPxGozzNJQKKvHS8MXvavWV11Ju9PPVrr/czLWa5tdomp/2cud1G6+d/tqwYQMuXLiAzz//HBqNBqNHj4bF0rKvpUGDBuFf//oXdu7cieeeew5z5sxBp06dMGzYMLz++uveKrVVBEFAcnIykpOTMX/+fHz//ffIys7G3j174Cj7BQ5jOKyh3WEzJQDqAKXLvSm2cOeHpCevqZglKz7ZkA1ZrQeCQjyyDo9yXVPppXQlN0+WnTdqNl2Qb9l8uWVrsRatyRx2r1x412iaWnjpmlqU6fTQaXXQ6a5sAeacX3PTF9ebjz99+jQSEhJu+LrLL8z7Y79veXl5bV6G10KltrYWJpMJGo0Gu3fvxunTp6+Y5/Tp04iMjERmZibq6+tx+PBhzJs3Dy+//DKKiooQHx+PhoYGlJWVoVu3bt4q/YZ0Oh1GjRqFUaNGoaKiAtu2bcNXm7NQeHI3Akr2OJsVm3pCCvaRZsWCAFtEEmwRSUpXQpdzOACHs5GD4LBBsF+rCfGlkBAcVogOG8SmabLdehP3tBhgDDLAaAiGXq+HTqe76gd7W5sHXwwGJRgMBiQl8b3uLl77X5w0aRLmzZuHqVOnIikpCQkJCVfMs2fPHrz77rtQq9XQ6/V45ZVXEBoaiiVLlmDx4sWwWp3n+hctWtSuQqU5k8mEzMxMZGZmoqCgANnZ2fj66y2oObYVgjbQ2b+Xqaezjyk/uP5CbXTxLvumTiwFqxmCtc4VCKJkc95H4rA23Udy4yMC5933zrvojQYDgoJMV9xdX1dXh27durW42775zY+8+55ulSDLrfiTxcccPHgQ/fv3V7oMF7vdjj179iArKwvfff89JLvd2VWLqTvsod3ZesifOexNXbNc7ISytmm4Dmqb+Yr+wARBQEhIZxiDjAhq+pC/0Z3ulw+3pp+wvLw8/nXehPviEnfsC95R7wVqtRpDhw7F0KFDUVNTg5ycHGzOysLRI3uBkn3OTiVNPWDvzE4lfY5kvxQW1rqm72aorHVQ2cyQLZf1XCyKMIWFo8tt0Yhq1k1+884k2XMx+TK+e72sU6dOmDJlCqZMmYKioiJ8/fXXyMrKRsWJHU3d33eFzdQDDmMET4+1B5Kt2TNWLnUE6QqNy5+xolIhLDwCMV1jr9rd/cU7t4n8Fd/dCoqPj8fcuXMxe/ZsHDx4ENnZ2di58xtYzx11PqgrtDsf1OVpditEa+0VXdarm65zyLbGFrOrNRrng7m6x1/1wVyhoaG8FkEdGkOlHVCpVBg4cCAGDhyIp556Cjt37kRWVhZ+/vkAdKcPQAqKhjWsBx8p7A4OO1Q1Z6CpLIK2puSKIw2NVovIyCh0iU64amh07tzZL5uSErkLQ6Wd0ev1uOeee3DPPfegtLQUW7ZswVebN6Ps5LcQTu2GNeQ22MJ6QgqK5umx1pJsUFeXQF1ZCG11CWTJhkC9HsPShqFHjx4twiMkJMSnOu8jam8YKu1YdHQ0HnnkEcyYMQOHDh1CdnY2tm3LQcPR484OLEMTYDP1hBwYrHSp7Y/dAnVVsTNIas5AdtihNxgx+p4JSEtLQ//+/aHR8KiPyN0YKj5AEASkpKQgJSUFCxYswK5du5CVlY19+/ZCV/qLs6t9U/cO39W+YGuAuuoU1JVFUNeeARwOhJpMGDnlt0hLS4NGo0FycrLSZRL5NYaKj9HpdBgzZgzGjBmD8+fPOx8KlpWFosIfEFC8B/agLpCMEZAMYZAMYX4fMoK1DurKImgqi6AylwGyjMioKIy6JxNpaWno3bu36xqIO7qgIKLrY6j4sLCwMDzwwAOYNm2a6+793T/+iNMl+13zyIHBsOvDm0Im3Hknv+jbrZOExhqoK4ugrSqC2PSogbjbbsOoe2cgLS0N3bt353URIoUwVPyAIAhITExEYmIiFixYgNraWhw9ehR5eXnYu3cvik6dQvWpY86ZRRUcehPseueRjGQMh6zr1O4v+osNla4gEeoqAAA9evTEyJG/xYgRIxAfH69whUQEMFT8UlBQkKuJ8sCBA9G7d2+cO3cOeXl5yMvLQ25eHo4eOQrL2VwAgKDRwRZ4KWQchnDImkBlN0KWIdZXQF1ZBF1VEdBQBQC4/fZkjBw5DSNGjEB0dLSyNRLRFRgqHYAgCIiIiEBERATS09MBAJIkoaioCHl5eThy5AgO5+ai8OSvcJQ6nK8JCII10OQ8ZWYMh6Q3ef4eGVmGaD7rvIek+hTQWANRFJHaty9Gpqdj+PDhCAsL82wNRNQmDJUOSqVSISEhAQkJCcjIyADgfFpnfn4+jhw5gry8PBzOzcPZkr3OFwgC5MDOsOnDnCFjCHc+iExo442AsgOq2jLnEUn1KciWOtfNoOnp6Rg6dChCQkLatg4i8hqGCrkEBAQgNTUVqamprnGVlZU4cuQIjhw5gty8POTm5qHufD4AQFCpYdebIOnDITUFjaw13Pj6jEOCquZMU5AUQ7Y1QKPVYvBddyE9PR2DBw+G0ciuaYh8EUOFrqtz584YMmQIhgwZAsD5GOXTp083O5rJxbGCo7CXHwIACNpA5/WZppBxNWuW7E13tRdBW1MM2W5FQGAghqUNRXp6OgYNGoTAQIWv4xBRmzFU6KYIgoDY2FjExsZi7NixAACbzYYTJ044j2Zyc3E4Nw+nSw7C9aiegE4QbA2QJRuMQUFIGz8WaWlpGDBgALRarYJbQ0TuxlChNtNoNOjVqxd69eqFyZMnAwDMZjPy8/ORl5eHo0ePIjQ0FGlpaUhNTWXX70R+jL/d5BFGoxEDBgzAgAEDlC6FiLyIfXgTEZHbMFSIiMhtGCpEROQ2DBUiInIbhgoREbkNQ4WIiNyGoUJERG7DUCEiIrdhqBARkdswVIiIyG0YKkRE5DYMFSIichuGChERuQ1DhYiI3IahQkREbtPqUDl9+jS+//57AEBjYyPMZrPHiiIiIt/UqlD55JNPsHDhQrz44osAgLKyMjz55JMeLYyIiHxPq0JlzZo1WLt2LYxGIwCga9euuHDhgkcLIyIi39OqUNFqtdBqta6f7Xa7xwoiIiLf1apn1A8aNAhvvfUWGhsb8d133+Hf//43Ro8e7enaiIjIx7TqSOWZZ55BaGgoEhMT8fHHHyM9PR2LFi3ycGlERORrWnWkIooiMjMzkZmZ6el6iIjIh7UqVLZv346lS5fizJkzsNvtkGUZgiDgwIEDnq6PiIh8SKtC5a9//SuWLVuGXr16QRAET9dEREQ+qlXXVKKiopCYmMhAISKi62rVkcqzzz6LuXPn4s4772zRtHjWrFkeK4yIiHxPq0LljTfegF6vh8Vigc1m83RNRETko1oVKlVVVfjnP//p6VqIiMjHteqaytChQ7Fr1y5P10JERD6uVUcqa9aswTvvvAOtVgu1Ws0mxUREdFWtCpWDBw96ug4iIvID1w2V48ePo3v37jh8+PBVpycnJ3ukKCIi8k3XDZX3338ff/7zn/G3v/3timmCIOCDDz7wWGFEROR7rhsqf/7znwEA77zzDnQ6XYtpFovFc1UREZFPalXrrwceeKBV44iIqGO77pHKuXPnUF5ejsbGRuTm5kKWZQCA2WxGQ0ODVwokIiLfcd1Q2bVrFz7//HOUlZVhyZIlrvEGgwGLFy/2eHFERORbrhsq9957L+69915kZ2djwoQJ3qqJiIh8VKvuUxk1ahQ2bNiA06dPt3g+/fz58z1WGBER+Z5Whcq8efMQFBSE5OTkFr0UExERNdeqUCkvL8e7777r6Vo6FLvdjpUrV6K4uBiCIFz1C8AtTzOZTHj44YcV2z4i6phaFSr9+/fH0aNH0atXL0/X02Fs2LABn376KeKMDqhEQJYBGc4vQHB+bzbOOd0ZGHLTMuTLpjunOee50CBDlmUMGzbMa9tERNSqUNm/fz8+//xzxMbGtjj9tWHDBo8V5s9qamrwz3ffwe2d7fh//arhiQdqrsw14qO1a9G9e3ckJSW5fwVERFfRqlBZtWoVampqsG/fPgDAoEGDEBQU5NHC/Nnq1athrqvDQ4PMHgkUAJjeow4HK3RYu/bfGDlyJB8FTURe0ao76rdu3YrnnnsOlZWVuHDhAp599lnk5OR4uja/VFhYiC+++AKjujQizih5bD2dtDIyE8zIzy/Ali1bPLYeIqLmWnWk8tlnn+Hjjz+GXq8HAMydOxfTpk3DjBkzPFqcv5FlGcuX/wMBKgemdqv3+PpGdrHg29IA/N/yf2DIkCE8uiQij2vVkQoAqFSqqw5T6+3evRt79+7DlK516KSVb/yCNhIF4NFeZlTX1GDVqlUeXx8RUauOVKZOnYrf/e53GDduHADn6bD77rvPo4X5G5vNhuX/WIZog4yxMY1eW2/XIAnjYhqwYcN/cM899/CiPRF5VKuOVGbNmoUlS5YgODgYnTp1wpIlSzBz5kwPl+ZfvvjiC5ScPoMHu9dC3erjQ/e4L6EBITrg9ddegyR57joOEVGrjlQA51Me+aTHW1NVVYXV77+HVJMNfcNsXl9/oFrGg91rsfzwMaxfvx5Tp071eg1E1DF4+W/mjundd99FY0MDpveoU6yGOyOs6BNqwzur3sb58+cVq4OI/BtDxcOOHTuGTRs3YkxMA2IMyp16EgTg0UQzbJZGLF++XLE6iMi/MVQ8SJZl/GPZMug1Mu7tpvxDzSL1DkyKr8f27dtdN7ISEbkTQ8WDvv32W/z088+Y2tUMg8bzTYhbIyO+AVEGGX9//TVYLBalyyEiP8NQ8RCLxYIVy/+BWKMDo7q0nw9vjQg80rMWp8+UYu3atUqXQ0R+hqHiIZ999hlKy8/ioR61ULWzvdwn1IbBERasWfMvlJSUKF0OEfmRdvZx5x8qKirw4QcfYECYFcmh9hu/QAEP9qyDGna88cbfIcvt49QcEfk+hooHrFq1CjabRdEmxDcSopNxX9c67Nu3Hzt27FC6HCLyEwwVNzty5AiysrJwd2wDIvUOpcu5rrGxjejWScI/3lyKurr2G4BE5DsYKm4kyzKWvfkmgnXAb7sq34T4RkQBeDSxFhcqq/DPf/5T6XKIyA8wVNwoJycHh3NzcX83MwLVvnGdIqGThNExjfji88+Rn5+vdDlE5OMYKm7S2NiIt1b8H+KDHBgR3X6aELfG/Qn1CNLKeP21/2WHk0TUJgwVN/noo49w7nwFHu5ZC9HHntxr0MiY3r0WR47mY+PGjUqXQ0Q+jKHiBmfPnsXaf6/BnREW9Appn02Ib2RIpBW3d7Zj1dsrceHCBaXLISIfxVBxg7feegsOyYYHunv+EcGeIgjAI4m1aGiox4oVK5Quh4h8FEOljQ4dOoScnBzcE1ePsMD23YT4RroYHMi4rR5btmzBwYMHlS6HiHwQQ6UNHA4Hlr25FJ0DgIm3tf8mxK3x2/gGROidHU7abN5/oBgR+TaGShtkZ2fjaH4BMhNqEdDqZ2i2b1oVMKNnLU4Vl+Djjz9Wuhwi8jEMlVtUX1+PVW+vRPdgCUMirUqX41Z9TTYMCrfgg9WrUVpaqnQ5RORDGCq3aM2aNbhQWYWHe5h9rglxazzUsx6ibMfSpW+ww0kiajWGyi04c+YMPvnkYwyNtKB7sG82Ib6R0AAH7u1qxu7dP2LXrl1Kl0NEPoKhcgtWrFgB0WFHZg/fbULcGuNjG3FbkANvLn0D9fX+va1E5B4MlZt08OBBfPvtt5h4Wz1Cdb7dhPhGVKKzw8lz5yvw/vvvK10OEfkAhspNkCQJ/1j2JsICgXv8pAnxjfQMtmNkl0Z89tlnOH78uNLlEFE7x1C5CV999RWOnziJaQm10KqUrsZ7MrvXw6B24PXXXoPD4d9HZ0TUNgyVVqqtrcU7q95GrxA77ozwrybEN2LUyHiguxmHc3OxefNmpcshonaModJKH374IWpqavFQTzMEP2xCfCPDo5ydZb614v9QVVWldDlE1E4xVFqhuLgY69Z9hrToRnQN6pjPGxEE4NFEM+rr6vCXv/wF3377LSorK5Uui4jaGT/pXMSz/m/5cmgFB+734V6I3SHWKOH+hDqs278Xe/fuBQDEdIlGSmpf9OnTBykpKYiLi4Mo8m8Voo6KoXIddrsdu3btwg+7d2Na9zoEa3lneUZ8I8bFNqKwVo2CajXyq4vwXU4psrKyAABBRgOS+6QgJSUFffr0Qe/evaHT6RSumoi8haECZ3iUlpaisLAQJ0+eRGFhIQpPnkBxcTFsdgmRehnj4xqVLrPd0KqAxBA7EkPsyEAjZBkoqxeRX61BQXUjjv36A3bv3g0AUKtU6NmzJ1JSU9GnTx/06dMHoaGhCm8BEXmKV0KlsrISM2fOBACcP38eoii6Plg+/fRTaLVab5QBSZJw5swZZ2g0fZ08cRzFJSWw2S51txIWCMTorRjXRUKMQUKqyQoNz+hckyAA0QYHog0WpHexAKhDrVXAsRo18qs0KCg7hC/yj+CTTz4BAHSJjnKdMuvTpw/i4+N5yozIT3glVDp37oz169cDAJYtWwa9Xo85c+a4ptvtdqjV7itFlmWUlJS4jjqKiopw8sRxnCouvmp4jI2WEGuQEGOwo4te8ptu7JUUpJXRP8yG/mHOZ7LYHHCdMiuoOoUfdpQhOzsbAGA06JHcpw/69ElBVFQUdDqd6ysgIABarRYBAQEtxrnz/UJE7iPIXu6C9mKoFBQUIDg4GLm5uUhOTobBYGgRNhMnTsRbb72F2NhYrF+/Hh9++CFsNhv69u2LP/3pT1Cprn334fr16/H3v//d9XNYINBFb0WMwRkeXQwSuujtCGwnn0uyDGw7rcNPFVpYpWu3V26wC6i3C9CrZQSqr//fplXJ6G+yYnSMpV02gZZloLxBREG1BvlVahTU6nDG3PpCRVFEgE7rDBydDtqmsNEFBCAgIPCKINLpdKisrER4eDhEUYQgCBBF0fXV/GehPe4wNysvL0dkZOR152m+Hy7/mHDXPmoPPWBf3Be++v/uzrpvv/12JCUltWkZin6sFhYW4v3334dKpcKyZcuuOs/x48exefNmrF27FhqNBi+99BI2bNiAKVOmXHO5siyjf5gVd0VY0Ndkg0Fz82/cXaVafFMacNOvuxWVFhHlDTe+RT8gIAATJ07Exo0b0Wi+8TWeXyq0yCoORGcv9FGWFt2I4dGtvylUEIAovQNRegtGRDtPmdVYBZQ3qGC2CTDbxKbvAmpdw82/y6hvaER9A691EbnLihUr2rwMRUPl7rvvvu4RBwD88MMPOHToEO6//34AQGNjI0wm0w2XffC8FgfPa6ERnef7Y/Q2xDSd4ooxSIgIdLSb56A02FtXyMSJEzF//nzIsox169a1etmd22njqxqr4DwdVq1BQbUGJ2vVsN9k/mnUKuh0OtcRi67paEWnC2hxpKLValFTUwOTydRhjkau58KFCx5rMCHLsk/tX0/uC09rD0d6l1M0VAIDA13DKpWqRb9SFosFgHOn3XvvvXj66adbvdy4uDisWLGixQX54yeO44cT513zXC1sYg0SwpvCZni09ab+8m6LbSU6rM433nC+jRs3QpZlbNq0qdXLnppQj9ExlraU5xayDJypV+FYtRr51WoU1OhQVuf84NGoVUhMTMR9Kamtvqai1Wqh0+lu+EdJc3l5eW0+tPcX3BeXcF9ckpeX1+ZltJOrCkBMTAx27NgBADh8+DBKSkoAAEOGDMETTzyBmTNnwmQyoaqqCnV1dYiJibnmskRRRFJS0hVvlPr6ehQVFbmaDhcVFV0ZNiqgi/5i2NjRxSAhqbMd+htcw2iLix/6B294TcWObzZ9gki1jMCQ1l1TGdVFmUCxSsDJWrXzekm1BsdqtTA3ZXSnICP69E3F5KZ7WRITE3kvC5GfaDehMmHCBKxfvx6TJ09GSkoKunbtCgDo0aMHFi1ahNmzZ8PhcECj0eDFF1+8bqhci16vv2bYuFqJNbUYO3byBL5vCpu4IAdevqMSKg+1ehUEYEysBWNilT+iuFXVVsF5GqtKjfwaLQprVZCaDjzjYmOQdtelJsRxcXE+dXqEiFrP662/vOHgwYPo379/m5dTX1+PnJwc/O///i9mJNZhXCwvCgOAQwbO1Kma7qhX41iNDuX1TaeyNGr0SuzlutkxOTkZISEhyhbchKc5LuG+uIT74hJ37It2c6TSHun1emRkZGDbtq344vBPGBJpgfEWWpL5k5zTOnx6wog65+0nCOkUhD4D+uLepqOQxMREr93MSkTtD0PlBgRBwIIFC/H7OXPwxclAzEjsuJ1KlteLWFNgRK/b+yAjIwMpKSmIiYnhqSwicmGotEJCQgImTpqEjRv+g9ExFsQYOl7397IMfJBvhEYXgJdeeglhYWFKl0RE7RA7XGql2bNnQ6/XY02BAf53FerG9p7T4tcLGsz5/VwGChFdE0OllUJCQvDozFk4dEGDnyo0SpfjVQ12Af86FoSePXpg8uTJSpdDRO0YQ+Um3HvvvYiLjcHa40E3fee3L1t3IhDVFuDpZ55hR45EdF0MlZugVqvx5PwFKKsTsKXEO/2CKa2wVoUtpwMxadJv0bt3b6XLIaJ2jqFykwYPHoy77rwTXxYZUGP171ZPDhlYnR+E4E6dMHfuXKXLISIfwFC5BU88+SSsDhHrTuiVLsWjdpzR4Xi1Ck88OR9BQUFKl0NEPoChcgvi4+MxZcq92FEagFO1re/Q0JfUWAV8csKI/v36Ydy4cUqXQ0Q+gqFyi2bOnIkgoxFrjhn9sonx2mN6WB0qLHrqKd7cSEStxlC5RUFBQZjz+7nIq1Rj3zn/6pYkr1KN78oC8MD06YiPj1e6HCLyIQyVNsjIyEC3rvH46LgRVj+5yd7uAFYXdEJ0ZARmzJihdDlE5GMYKm2gVqsxf8FCnGsQkF3sH02MN58KwBmzgD8+tZjPOCGim8ZQaaM77rgDw4YNxX9OGVBl8e1rD+caRKwvMmLEiBEYPHiw0uUQkQ9iqLjBvHlPwAEVPj3uu02MZRn4sMAAUa3FggULlC6HiHwUQ8UNYmNjcf/vMvFtWQBO1PhmE+MD5zX46bwWs2bPRkREhNLlEJGPYqi4ycMPP4zOIcFYUxDkc02MG+3AhwWdkNCtK+677z6lyyEiH8ZQcRODwYDfz30MBdUq7C73rSbGXxTqcaERWPw0O4wkorZhqLjR3XffjZ49euDjE0Gw+EgT42KzCtnFgcjIyECfPn2ULoeIfBxDxY1UKhUWLFyIC43ApqJApcu5IYcMvJ9vRFBQEB577DGlyyEiP8BQcbPU1FSMHDkSXxXrUdHYvnfvt6U6FFSp8fi8JxAcHKx0OUTkB9r3p56PevzxxwFRg4/bcRPjWpuAj08YkdInGRMmTFC6HCLyEwwVD4iKisID06djd7kO+VXt88L3J8f0aJBEPLX4aYgi3wZE5B78NPGQ6dOnI8wUijXHjHC0sybG+VVq7CwNQGbmNCQkJChdDhH5EYaKhwQGBuKxPzyOkzUqfFfWfvrQsjuA9/ODEBEehkceeUTpcojIzzBUPGjs2LG4Pak3Pj1hRINd6Wqcvi4JQIlZxMI/LkJgYPtvoUZEvoWh4kGiKGLBwj+iygJsbAdNjCsaRXxRaMTQIUMwfPhwpcshIj/EUPGwpKQkjBs3DpuL9TjboOzu/leBARDVWLBwoaJ1EJH/Yqh4wWOPPQaVRouPjinXxPin8xrsP6fFI4/ORHR0tGJ1EJF/Y6h4QXh4OB5+eAb2ndMhr9L7TYwtEvBhQRDib4tDZmam19dPRB0HQ8VLMjMzERkRjn8dC/J6E+P/FAbiXIOAxU8/A41G492VE1GHwlDxEp1Oh3lPPIniWhE7znivifHpOhW+KtZjwoQJ6Nu3r9fWS0QdE0PFi9LT05Ga0gfrThpRZ/P8o4dlGVh91AC93oB58+Z5fH1ERAwVLxIEAQsW/hFmG7C+0PNNjL8v0+JIlQaP/eFxhISEeHx9REQMFS/r2bMnfvObDGwpCURpned2f51NwNoTQejWNR4ZGRkeWw8RUXMMFQXMmTMHuoAA/PuYwWPr+PSEHmargOkPPsQOI4nIa9pnF7p+LjQ0FI88OhNvvfUW/nKgE1SC8/qHDOcXXMPO6y6OptfJsvPni43HZAgtXwfB9frTZgH33X8f4uLivLVZREQMFaVMnToVJ0+eRElJMQRBaPoSmw1f+QXgutNEUXQNDwwNxezZs1FUVKTYNhJRx8NQUYhWq8Xzzz+vdBlERG7Fk+1EROQ2DBUiInIbhgoREbkNQ4WIiNyGoUJERG7DUCEiIrdhqBARkdswVIiIyG0YKkRE5DaCLMtefg6h5/3000/Q6bz3ICwiIn9gsVjQr1+/Ni3DL0OFiIiUwdNfRETkNgwVIiJyG4YKERG5DUOFiIjchqFCRERuw1AhIiK38atQWbZsGUaMGIHJkydj8uTJ2Llzp2vaypUrMW7cOEyYMAHffvutglV6zzfffIMJEyZg3LhxePvtt5Uux+tGjx6NSZMmYfLkyZg6dSoAoKqqCrNmzcL48eMxa9YsVFdXK1ylZzz//PMYMmQIJk6c6Bp3vW3359+Pq+2LjvhZUVpaihkzZuCee+5BRkYGVq9eDcAD7wvZj7z55pvyO++8c8X4goICedKkSbLFYpFPnToljxkzRrbb7QpU6D12u10eM2aMfOrUKdlisciTJk2SCwoKlC7Lq0aNGiVXVFS0GPfKK6/IK1eulGVZlleuXCm/+uqrSpTmcXv27JEPHTokZ2RkuMZda9v9/ffjavuiI35WlJeXy4cOHZJlWZZra2vl8ePHywUFBW5/X/jVkcq1bNu2DRkZGdBqtYiLi0N8fDx++eUXpcvyqF9++QXx8fGIi4uDVqtFRkYGtm3bpnRZitu2bRumTJkCAJgyZQq2bt2qbEEeMmjQIAQHB7cYd61t9/ffj6vti2vx530RERGB5ORkAIDRaERCQgLKy8vd/r7wu1BZs2YNJk2ahOeff951GFdeXo6oqCjXPJGRkSgvL1eqRK/oiNt8NXPmzMHUqVPx8ccfAwAqKioQEREBwPlLduHCBSXL86prbXtHfa905M+KkpIS5OXloW/fvm5/X6g9U7LnzJw5E+fPn79i/KJFizB9+nQ88cQTEAQBS5cuxd/+9jcsWbIE8lV6ohEEwRvlKqYjbvPl1q5di8jISFRUVGDWrFlISEhQuqR2qSO+VzryZ0VdXR0WLlyIF154AUaj8Zrz3eq+8LlQef/991s13+9+9zs8/vjjAICoqCiUlZW5ppWXl7uS2V91xG2+XGRkJADAZDJh3Lhx+OWXX2AymXD27FlERETg7NmzCA0NVbhK77nWtnfE90pYWJhruCN9VthsNixcuBCTJk3C+PHjAbj/feFXp7/Onj3rGt66dSt69uwJwNkKaNOmTbBarSguLkZhYSFSU1OVKtMrUlJSUFhYiOLiYlitVmzatAmjR49Wuiyvqa+vh9lsdg1/99136NmzJ0aPHo0vv/wSAPDll19izJgxClbpXdfa9o74+9ERPytkWcZ///d/IyEhAbNmzXKNd/f7wq96KX722Wdx5MgRAEBMTAxefvllV7KuWLEC69atg0qlwgsvvID09HQlS/WKnTt34q9//SskScJ9992HefPmKV2S1xQXF+PJJ58EAEiShIkTJ2LevHmorKzEokWLUFpaiujoaCxduhQhISHKFusBixcvxp49e1BZWQmTyYQFCxZg7Nix19x2f/79uNq+2LNnT4f7rNi3bx8eeughJCYmQhSdxxOLFy9GamqqW98XfhUqRESkLL86/UVERMpiqBARkdswVIiIyG0YKkRE5DYMFSIichuGChERuQ1DhQjAli1b0KtXLxw/fhyAs2+k1NRUTJ48Gb/5zW/w3HPPwWazAQB+/PFH3HHHHZgyZQruvvtuvPLKK9dd9ueff47BgwdjypQpGD9+PObMmYMDBw64pv/Xf/0XRo8e7eqG/YEHHnC97uWXX77qMu12O+666y689tprAIBdu3Zh2rRprq41JEnC5MmTW6yHyBsYKkQANm7ciDvuuANfffWVa9xtt92G9evXY8OGDSgrK8PmzZtd0wYOHIgvv/wSX375JbZv3479+/dfd/m/+c1v8OWXX+Lrr7/G3LlzsWDBAleAAcBzzz2H9evXY/369fjoo49uWO93332Hbt26YfPmzZBlGcOHD0eXLl3w2WefAQA+/PBDpKSkYMCAATe7K4jahKFCHV5dXR0OHDiAv/zlL9i0adMV01UqFVJTU6/aQ2tAQACSkpJuqifbwYMHIzMz09Vz8q3YuHEjHnnkEURHR+Onn34C4HwY1cqVK1FQUIA1a9bgmWeeueXlE90qhgp1eFu3bsWIESPQrVs3hISE4PDhwy2mWywW/PzzzxgxYsQVr62urkZRUREGDRp0U+tMTk7GiRMnXD+/+uqrrtNfTz/99HVf29jYiB9++AGjRo3CxIkTXUEYERGBRx99FNOmTcO8efP8svsZav8YKtThbdq0CRkZGQCcp6k2btwIADh16hQmT56Mu+66C126dEHv3r1dr9m3bx8mTZqEYcOGYeTIkQgPD7+pdV7eO1Lz018Xr5Ncy/bt23HXXXchMDAQ48ePx5YtWyBJEgDgoYcegsPhcD0+mcjbfK7reyJ3qqysxO7du1FQUABBECBJEgRBwIMPPui6pnL27FnMmDED27Ztc/XgOnDgQKxcuRInT57Egw8+iHHjxiEpKanV683NzUX37t1vqeZNmzbhwIEDrl6nq6qq8OOPP2Lo0KEQRdHvnv9BvoVHKtShZWdnY8qUKdi+fTtycnKwc+dOxMbGtrhGEhERgWeeeQZvv/32Fa/v1q0b/vCHP2DVqlWtXueePXvwySefIDMz86brNZvN2L9/P3bs2IGcnBzk5OTgxRdfdB1dESmNRyrUoW3atAlz585tMW78+PF46623WowbO3Ysli1bhn379l2xjAceeADvvvsuiouLERcXd9X1fPXVV9i/fz8aGxsRGxuLN998s8WRyquvvooVK1a4fv70008BAF988YXrmeEX1zV48GBotVrXuDFjxuB//ud/YLVaW4wnUgK7viciIrfh6S8iInIbnv4icpN169bhgw8+aDFuwIAB+NOf/qRQRUTex9NfRETkNjz9RUREbsNQISIit2GoEBGR2zBUiIjIbf4/AjXqssDyp6IAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.set_style(\"whitegrid\")\n",
    "ax = sns.violinplot(data=df, x='ARR_DELAY', y='ontime', inner='box', orient='h')\n",
    "ax.set_xlim(-50, 200);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-50.0, 200.0)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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KtK1iIhIE1evlsprr73G888/j8PhwGaz6ZBiERGpVb1CZcOGDZGuQ0REmoHjhsqOHTvo1KkTmzZtqvX5Hj16RKQoERFpmo4bKi+99BIPP/wwjzzyyM+eMwyDV155JWKFiYhI03PcUHn44YcBeP7554mJiTnmOY/HE7mqRESkSarX0V+TJk2q1zQREWnZjttSOXDgAPn5+VRXV7N582ZM0wSgoqICt9vdIAWKiEjTcdxQWbVqFe+++y779+9n+vTpoelxcXHceeedES9ORESaluOGyiWXXMIll1zC+++/zwUXXNBQNYmISBNVr/NUhg0bxvz589m7d+8x16e/+eabI1aYiIg0PfUKlalTp5KQkECPHj2OGaVYRETkaPUKlfz8fF544YVI1yI/sX37dubPn8+1115LcnJytMsRETmheh1S3LdvX7799ttI1yJHMU2TJ574K/PmzeP6/57ys1EN9u3bR2FhYZSqExGpXb1aKuvWrePdd98lOzv7mO6v+fPnR6ywlu6zzz5j8+YtXNDOzfrCQm655Wban3EGbdpms/OH79n74z7aZGXy6r9ew2q1RrtcERGgnqHy3HPPUVZWxhdffAHAgAEDSEhIiGhhLZlpmvzzhedJc5lc0amKCR3cLNody56Kbez86gdax/jp2ibIih/3s2bNGoYOHRrtkkVEgHqGytKlS3nnnXcYNWoUpmlyzz33MHHiRK655ppI19cirVq1iu+2bef63EpsFrBZTC7vdOzJpoEgbCyOZc477yhURKTRqFeovPPOO7z55pu4XC4Arr/+eq644gqFSgT4fD6enf0MmXEmgzLqHl/NaoGRbSp586uv2L59O507d27AKkVEalevHfXAMf326sOPnHfeeYe8PXu5ulM51hP8ds5v4yHGWvMaEZHGoF4tlUsvvZTLL7+cUaNGATXdYZdddllEC2uJCgoKePmll+jb2kvv1r4Tzh9nNxmcWc2yZUuZPHkyGRkZDVCliEjd6tVSmTx5MtOnT6dVq1YkJiYyffp0rr322giX1rL4/X5mznyKgM/D/9elst6vG9veDUE/s2c/E8HqRETqp14tFai5yqOu9BgZBw8e5KGH/sjGjV8zsVMlac5gvV/bOjbIxe2qmLd8BZdccik9e/aMYKUiIsdX730qEhkHDx7kv6+bzLebvubG3HLGtq8+6WWMbe8mORZm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o0e0yxARqTftUxERkbBRqIiISNgoVEREJGwUKiIiEjYKFRERCRuFioiIhI1CRUREwkahIiIiYaNQERGRsDFM0zzBVTuani+//JKYmJO/1ruISEvm8Xjo06fPaS2jWYaKiIhEh7q/REQkbBQqIiISNgoVEREJG4WKiIiEjUJFRETCRqEiIiJh06xCZebMmQwdOpTx48czfvx4Vq5cGXpu9uzZjBo1igsuuICPP/44ilU2nI8++ogLLriAUaNG8eyzz0a7nAY3fPhwxo0bx/jx47n00ksBKCkpYfLkyYwePZrJkydTWloa5Soj47777uPcc89l7NixoWnHe+/N+fNR27Zoid8V+/bt45prruGiiy5izJgxvPzyy0AE/i7MZuSpp54yn3/++Z9N37Ztmzlu3DjT4/GYu3fvNkeMGGH6/f4oVNhw/H6/OWLECHP37t2mx+Mxx40bZ27bti3aZTWoYcOGmYWFhcdMe/TRR83Zs2ebpmmas2fPNh977LFolBZxa9euNb/55htzzJgxoWl1vffm/vmobVu0xO+K/Px885tvvjFN0zTLy8vN0aNHm9u2bQv730WzaqnUZdmyZYwZMwaHw0G7du1o3749GzdujHZZEbVx40bat29Pu3btcDgcjBkzhmXLlkW7rKhbtmwZEyZMAGDChAksXbo0ugVFyIABA2jVqtUx0+p6783981HbtqhLc94W6enp9OjRA4D4+Hg6duxIfn5+2P8uml2ovPbaa4wbN4777rsv1IzLz88nMzMzNE9GRgb5+fnRKrFBtMT3XJspU6Zw6aWX8uabbwJQWFhIeno6UPMhKyoqimZ5Daqu995S/1Za8nfFnj172LJlC7179w7734UtMiVHzrXXXsvBgwd/Nv3222/nyiuvZNq0aRiGwYwZM3jkkUeYPn06Zi0j0RiG0RDlRk1LfM8/9frrr5ORkUFhYSGTJ0+mY8eO0S6pUWqJfyst+buisrKSW2+9lfvvv5/4+Pg65zvVbdHkQuWll16q13yXX345N910EwCZmZns378/9Fx+fn4omZurlviefyojIwOA1NRURo0axcaNG0lNTaWgoID09HQKCgpISUmJcpUNp6733hL/Vlq3bh2635K+K3w+H7feeivjxo1j9OjRQPj/LppV91dBQUHo/tKlS+nSpQtQcxTQwoUL8Xq95OXlsXPnTnr16hWtMhtEz5492blzJ3l5eXi9XhYuXMjw4cOjXVaDqaqqoqKiInR/9erVdOnSheHDhzN37lwA5s6dy4gRI6JYZcOq6723xM9HS/yuME2T3//+93Ts2JHJkyeHpof776JZjVJ8zz33sHXrVgDatm3LQw89FErWWbNmMWfOHKxWK/fffz/nnXdeNEttECtXruTPf/4zgUCAyy67jKlTp0a7pAaTl5fHb3/7WwACgQBjx45l6tSpFBcXc/vtt7Nv3z6ysrKYMWMGSUlJ0S02Au68807Wrl1LcXExqamp3HLLLYwcObLO996cPx+1bYu1a9e2uO+KL774gquvvpquXbtisdS0J+6880569eoV1r+LZhUqIiISXc2q+0tERKJLoSIiImGjUBERkbBRqIiISNgoVEREJGwUKiIiEjYKFRHggw8+oFu3buzYsQOoGRupV69ejB8/nosvvph7770Xn88HwGeffUa/fv2YMGECF154IY8++uhxl/3uu+8ycOBAJkyYwOjRo5kyZQrr168PPf+73/2O4cOHh4ZhnzRpUuh1Dz30UK3L9Pv9nHPOOfz1r38FYNWqVVxxxRWhoTUCgQDjx48/Zj0iDUGhIgIsWLCAfv36sWjRotC0M844g3nz5jF//nz279/P4sWLQ8/179+fuXPnMnfuXFasWMG6deuOu/yLL76YuXPnsmTJEq6//npuueWWUIAB3HvvvcybN4958+bxxhtvnLDe1atXk5OTw+LFizFNkyFDhtCmTRveeecdAF599VV69uzJ2WeffbKbQuS0KFSkxausrGT9+vX86U9/YuHChT973mq10qtXr1pHaI2NjSU3N/ekRrIdOHAgEydODI2cfCoWLFjAf/3Xf5GVlcWXX34J1FyMavbs2Wzbto3XXnuNu++++5SXL3KqFCrS4i1dupShQ4eSk5NDUlISmzZtOuZ5j8fDV199xdChQ3/22tLSUnbt2sWAAQNOap09evTg+++/Dz1+7LHHQt1fd91113FfW11dzSeffMKwYcMYO3ZsKAjT09P5zW9+wxVXXMHUqVOb5fAz0vgpVKTFW7hwIWPGjAFquqkWLFgAwO7duxk/fjznnHMObdq04cwzzwy95osvvmDcuHEMHjyY888/n7S0tJNa509HRzq6++vwfpK6rFixgnPOOQen08no0aP54IMPCAQCAFx99dUEg8HQ5ZNFGlqTG/peJJyKi4v59NNP2bZtG4ZhEAgEMAyDq666KrRPpaCggGuuuYZly5aFRnDt378/s2fP5ocffuCqq65i1KhR5Obm1nu9mzdvplOnTqdU88KFC1m/fn1o1OmSkhI+++wzBg0ahMViaXbX/5CmRS0VadHef/99JkyYwIoVK1i+fDkrV64kOzv7mH0k6enp3H333Tz77LM/e31OTg433ngjzz33XL3XuXbtWt566y0mTpx40vVWVFSwbt06PvzwQ5YvX87y5ct54IEHQq0rkWhTS0VatIULF3L99dcfM2306NE888wzx0wbOXIkM2fO5IsvvvjZMiZNmsQLL7xAXl4e7dq1q3U9ixYtYt26dVRXV5Odnc1TTz11TEvlscceY9asWaHHb7/9NgDvvfde6Jrhh9c1cOBAHA5HaNqIESP4y1/+gtfrPWa6SDRo6HsREQkbdX+JiEjYqPtLJEzmzJnDK6+8csy0s88+mz/84Q9Rqkik4an7S0REwkbdXyIiEjYKFRERCRuFioiIhI1CRUREwub/BxvIaQ73mCUEAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.violinplot(data=df, x='ARR_DELAY', y='ontime', \n",
    "                    inner='box', orient='h', gridsize=1000)\n",
    "ax.set_xlim(-50, 200)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Oddball values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 660.52query/s] \n",
      "Downloading: 100%|██████████| 1742/1742 [00:01<00:00, 1299.38rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery depdelay\n",
    "SELECT\n",
    "  DEP_DELAY,\n",
    "  AVG(ARR_DELAY) AS arrival_delay,\n",
    "  COUNT(ARR_DELAY) AS numflights\n",
    "FROM\n",
    "  dsongcp.flights_tzcorr\n",
    "GROUP BY\n",
    "  DEP_DELAY\n",
    "ORDER BY\n",
    "  DEP_DELAY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1742"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(depdelay)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>DEP_DELAY</th>\n",
       "      <th>arrival_delay</th>\n",
       "      <th>numflights</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-6.036576</td>\n",
       "      <td>4019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-234.0</td>\n",
       "      <td>-235.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-229.0</td>\n",
       "      <td>-238.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-204.0</td>\n",
       "      <td>-119.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-201.0</td>\n",
       "      <td>-194.000000</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   DEP_DELAY  arrival_delay  numflights\n",
       "0        NaN      -6.036576        4019\n",
       "1     -234.0    -235.000000           1\n",
       "2     -229.0    -238.000000           1\n",
       "3     -204.0    -119.000000           1\n",
       "4     -201.0    -194.000000           1"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "depdelay[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>DEP_DELAY</th>\n",
       "      <th>arrival_delay</th>\n",
       "      <th>numflights</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>-40.0</td>\n",
       "      <td>-38.947368</td>\n",
       "      <td>57</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>56</th>\n",
       "      <td>-39.0</td>\n",
       "      <td>-38.194030</td>\n",
       "      <td>67</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>57</th>\n",
       "      <td>-38.0</td>\n",
       "      <td>-37.265060</td>\n",
       "      <td>83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>58</th>\n",
       "      <td>-37.0</td>\n",
       "      <td>-36.500000</td>\n",
       "      <td>104</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>-36.0</td>\n",
       "      <td>-34.961165</td>\n",
       "      <td>103</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    DEP_DELAY  arrival_delay  numflights\n",
       "55      -40.0     -38.947368          57\n",
       "56      -39.0     -38.194030          67\n",
       "57      -38.0     -37.265060          83\n",
       "58      -37.0     -36.500000         104\n",
       "59      -36.0     -34.961165         103"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "depdelay[55:60]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Filtering Data on Occurence Frequency"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 702.56query/s] \n",
      "Downloading: 100%|██████████| 9/9 [00:01<00:00,  7.09rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery df\n",
    "DECLARE total_flights INT64;\n",
    "SET total_flights = (\n",
    "    SELECT COUNT(*) FROM dsongcp.flights_tzcorr\n",
    ");\n",
    "\n",
    "CREATE TEMPORARY FUNCTION linear_fit(NUM_TOTAL INT64, THRESH INT64)\n",
    "RETURNS STRUCT<thresh INT64, num_removed INT64, lm FLOAT64>\n",
    "AS ((\n",
    "    SELECT AS STRUCT\n",
    "        THRESH,\n",
    "        (NUM_TOTAL - SUM(numflights)) AS num_removed,\n",
    "        ROUND(AVG(arrival_delay * numflights) / AVG(dep_delay * numflights), 2) AS lm\n",
    "    FROM\n",
    "    (\n",
    "        SELECT\n",
    "            DEP_DELAY,\n",
    "            AVG(ARR_DELAY) AS arrival_delay,\n",
    "            STDDEV(ARR_DELAY) AS stddev_arrival_delay,\n",
    "            COUNT(ARR_DELAY) AS numflights\n",
    "        FROM\n",
    "            dsongcp.flights_tzcorr\n",
    "        GROUP BY\n",
    "            DEP_DELAY\n",
    "    )\n",
    "    WHERE numflights > THRESH\n",
    "))\n",
    ";\n",
    "\n",
    "SELECT linear_fit(total_flights, 1000) stats\n",
    "UNION ALL SELECT linear_fit(total_flights, 500)\n",
    "UNION ALL SELECT linear_fit(total_flights, 370)\n",
    "UNION ALL SELECT linear_fit(total_flights, 300)\n",
    "UNION ALL SELECT linear_fit(total_flights, 200)\n",
    "UNION ALL SELECT linear_fit(total_flights, 100)\n",
    "UNION ALL SELECT linear_fit(total_flights, 22)\n",
    "UNION ALL SELECT linear_fit(total_flights, 10)\n",
    "UNION ALL SELECT linear_fit(total_flights, 5)\n",
    "ORDER BY stats.thresh DESC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    (1000, 663833, 0.36)\n",
       "1     (500, 620163, 0.39)\n",
       "2      (370, 607222, 0.4)\n",
       "3     (300, 601551, 0.41)\n",
       "4     (200, 591733, 0.41)\n",
       "5     (100, 579700, 0.43)\n",
       "6      (22, 556437, 0.46)\n",
       "7      (10, 553591, 0.46)\n",
       "8       (5, 552777, 0.47)\n",
       "Name: stats, dtype: object"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['stats'].map(lambda x: (x['thresh'], x['num_removed'], x['lm']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Arrival delay conditioned on departure delay"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 956.51query/s] \n",
      "Downloading: 100%|██████████| 393/393 [00:01<00:00, 315.09rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery depdelay\n",
    "SELECT\n",
    "    DEP_DELAY,\n",
    "    AVG(ARR_DELAY) AS arrival_delay,\n",
    "    STDDEV(ARR_DELAY) AS stddev_arrival_delay,\n",
    "    COUNT(ARR_DELAY) AS numflights\n",
    "FROM\n",
    "    dsongcp.flights_tzcorr\n",
    "GROUP BY\n",
    "    DEP_DELAY\n",
    "HAVING numflights > 370\n",
    "ORDER BY DEP_DELAY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>DEP_DELAY</th>\n",
       "      <th>arrival_delay</th>\n",
       "      <th>stddev_arrival_delay</th>\n",
       "      <th>numflights</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>-6.036576</td>\n",
       "      <td>15.250012</td>\n",
       "      <td>4019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-30.0</td>\n",
       "      <td>-29.273839</td>\n",
       "      <td>13.359410</td>\n",
       "      <td>409</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-29.0</td>\n",
       "      <td>-28.245704</td>\n",
       "      <td>12.297647</td>\n",
       "      <td>582</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-28.0</td>\n",
       "      <td>-27.404196</td>\n",
       "      <td>12.572267</td>\n",
       "      <td>715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-27.0</td>\n",
       "      <td>-27.028487</td>\n",
       "      <td>12.339278</td>\n",
       "      <td>1018</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   DEP_DELAY  arrival_delay  stddev_arrival_delay  numflights\n",
       "0        NaN      -6.036576             15.250012        4019\n",
       "1      -30.0     -29.273839             13.359410         409\n",
       "2      -29.0     -28.245704             12.297647         582\n",
       "3      -28.0     -27.404196             12.572267         715\n",
       "4      -27.0     -27.028487             12.339278        1018"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "depdelay[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = depdelay.plot(kind='line', x='DEP_DELAY', \n",
    "              y='arrival_delay', yerr='stddev_arrival_delay')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Z_30 = 0.52\n",
    "depdelay['arr_delay_30'] = (Z_30 * depdelay['stddev_arrival_delay']) \\\n",
    "             + depdelay['arrival_delay']\n",
    "\n",
    "ax = plt.axes()\n",
    "depdelay.plot(kind='line', x='DEP_DELAY', y='arr_delay_30',\n",
    "              ax=ax, ylim=(0,30), xlim=(0,30), legend=False)\n",
    "ax.set_xlabel('Departure Delay (minutes)')\n",
    "ax.set_ylabel('> 30% prob of this\\n Arrival Delay (minutes)');\n",
    "\n",
    "x = np.arange(0, 30)\n",
    "y = np.ones_like(x) * 15\n",
    "ax.plot(x, y, 'r.');\n",
    "\n",
    "y = np.arange(0, 30)\n",
    "x = np.ones_like(y) * 13\n",
    "ax.plot(x, y, 'g.');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 915.39query/s] \n",
      "Downloading: 100%|██████████| 393/393 [00:01<00:00, 324.58rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery depdelay\n",
    "SELECT\n",
    "    DEP_DELAY,\n",
    "    APPROX_QUANTILES(ARR_DELAY, 101)[OFFSET(70)] AS arrival_delay,\n",
    "    COUNT(ARR_DELAY) AS numflights\n",
    "FROM\n",
    "    dsongcp.flights_tzcorr\n",
    "GROUP BY\n",
    "    DEP_DELAY\n",
    "HAVING numflights > 370\n",
    "ORDER BY DEP_DELAY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.axes()\n",
    "depdelay.plot(kind='line', x='DEP_DELAY', y='arrival_delay',\n",
    "              ax=ax, ylim=(0,30), xlim=(0,30), legend=False)\n",
    "ax.set_xlabel('Departure Delay (minutes)')\n",
    "ax.set_ylabel('> 30% prob of this\\n Arrival Delay (minutes)');\n",
    "\n",
    "x = np.arange(0, 30)\n",
    "y = np.ones_like(x) * 15\n",
    "ax.plot(x, y, 'r.');\n",
    "\n",
    "y = np.arange(0, 30)\n",
    "x = np.ones_like(y) * 16\n",
    "ax.plot(x, y, 'g.');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Creating training/evaluation dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 1/1 [00:00<00:00, 882.83query/s] \n",
      "Downloading: 100%|██████████| 5/5 [00:01<00:00,  4.42rows/s]\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>FL_DATE</th>\n",
       "      <th>is_train_day</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2015-01-01</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2015-01-02</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2015-01-03</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2015-01-04</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2015-01-05</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      FL_DATE is_train_day\n",
       "0  2015-01-01         True\n",
       "1  2015-01-02        False\n",
       "2  2015-01-03        False\n",
       "3  2015-01-04         True\n",
       "4  2015-01-05         True"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT\n",
    "  FL_DATE,\n",
    "  IF(ABS(MOD(FARM_FINGERPRINT(CAST(FL_DATE AS STRING)), 100)) < 70,\n",
    "     'True', 'False') AS is_train_day\n",
    "FROM (\n",
    "  SELECT\n",
    "    DISTINCT(FL_DATE) AS FL_DATE\n",
    "  FROM\n",
    "    dsongcp.flights_tzcorr)\n",
    "ORDER BY\n",
    "  FL_DATE\n",
    "LIMIT 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 3/3 [00:00<00:00, 1610.10query/s]                        \n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: []\n",
       "Index: []"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "CREATE OR REPLACE TABLE dsongcp.trainday AS\n",
    "\n",
    "SELECT\n",
    "  FL_DATE,\n",
    "  IF(ABS(MOD(FARM_FINGERPRINT(CAST(FL_DATE AS STRING)), 100)) < 70,\n",
    "     'True', 'False') AS is_train_day\n",
    "FROM (\n",
    "  SELECT\n",
    "    DISTINCT(FL_DATE) AS FL_DATE\n",
    "  FROM\n",
    "    dsongcp.flights_tzcorr)\n",
    "ORDER BY\n",
    "  FL_DATE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 4/4 [00:00<00:00, 2270.57query/s]                        \n",
      "Downloading: 100%|██████████| 358/358 [00:01<00:00, 298.65rows/s]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery depdelay\n",
    "SELECT\n",
    "    DEP_DELAY,\n",
    "    APPROX_QUANTILES(ARR_DELAY, 101)[OFFSET(70)] AS arrival_delay,\n",
    "    COUNT(ARR_DELAY) AS numflights\n",
    "FROM\n",
    "    dsongcp.flights_tzcorr\n",
    "JOIN dsongcp.trainday USING(FL_DATE)\n",
    "WHERE is_train_day = 'True'\n",
    "GROUP BY\n",
    "    DEP_DELAY\n",
    "HAVING numflights > 370\n",
    "ORDER BY DEP_DELAY"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.axes()\n",
    "depdelay.plot(kind='line', x='DEP_DELAY', y='arrival_delay',\n",
    "              ax=ax, ylim=(0,30), xlim=(0,30), legend=False)\n",
    "ax.set_xlabel('Departure Delay (minutes)')\n",
    "ax.set_ylabel('> 30% prob of this\\n Arrival Delay (minutes)');\n",
    "\n",
    "x = np.arange(0, 30)\n",
    "y = np.ones_like(x) * 15\n",
    "ax.plot(x, y, 'r.');\n",
    "\n",
    "y = np.arange(0, 30)\n",
    "x = np.ones_like(y) * 16\n",
    "ax.plot(x, y, 'g.');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 3/3 [00:00<00:00, 1671.48query/s]                        \n",
      "Downloading: 100%|██████████| 1/1 [00:01<00:00,  1.17s/rows]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery df_eval\n",
    "SELECT\n",
    "  SUM(IF(DEP_DELAY < 16\n",
    "      AND arr_delay < 15, 1, 0)) AS correct_nocancel,\n",
    "  SUM(IF(DEP_DELAY < 16\n",
    "      AND arr_delay >= 15, 1, 0)) AS wrong_nocancel,\n",
    "  SUM(IF(DEP_DELAY >= 16\n",
    "      AND arr_delay < 15, 1, 0)) AS wrong_cancel,\n",
    "  SUM(IF(DEP_DELAY >= 16\n",
    "      AND arr_delay >= 15, 1, 0)) AS correct_cancel\n",
    "FROM (\n",
    "  SELECT\n",
    "    DEP_DELAY,\n",
    "    ARR_DELAY\n",
    "  FROM\n",
    "    dsongcp.flights_tzcorr\n",
    "  JOIN dsongcp.trainday USING(FL_DATE)\n",
    "  WHERE is_train_day = 'False' \n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    0.947403\n",
      "dtype: float64\n",
      "0    0.8187\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(df_eval['correct_nocancel'] /\n",
    "      (df_eval['correct_nocancel'] + df_eval['wrong_nocancel']))\n",
    "print(df_eval['correct_cancel'] / \n",
    "      (df_eval['correct_cancel'] + df_eval['wrong_cancel']))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>correct_nocancel</th>\n",
       "      <th>wrong_nocancel</th>\n",
       "      <th>wrong_cancel</th>\n",
       "      <th>correct_cancel</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>7365039</td>\n",
       "      <td>408885</td>\n",
       "      <td>303860</td>\n",
       "      <td>1372148</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   correct_nocancel  wrong_nocancel  wrong_cancel  correct_cancel\n",
       "0           7365039          408885        303860         1372148"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_eval.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Query complete after 0.00s: 100%|██████████| 3/3 [00:00<00:00, 1639.68query/s]                        \n",
      "Downloading: 100%|██████████| 1/1 [00:01<00:00,  1.36s/rows]\n"
     ]
    }
   ],
   "source": [
    "%%bigquery df_eval\n",
    "SELECT\n",
    "  SUM(IF(DEP_DELAY = 15\n",
    "      AND arr_delay < 15, 1, 0)) AS correct_nocancel,\n",
    "  SUM(IF(DEP_DELAY = 15\n",
    "      AND arr_delay >= 15, 1, 0)) AS wrong_nocancel,\n",
    "  SUM(IF(DEP_DELAY = 16\n",
    "      AND arr_delay < 15, 1, 0)) AS wrong_cancel,\n",
    "  SUM(IF(DEP_DELAY = 16\n",
    "      AND arr_delay >= 15, 1, 0)) AS correct_cancel\n",
    "FROM (\n",
    "  SELECT\n",
    "    DEP_DELAY,\n",
    "    ARR_DELAY\n",
    "  FROM\n",
    "    dsongcp.flights_tzcorr\n",
    "  JOIN dsongcp.trainday USING(FL_DATE)\n",
    "  WHERE is_train_day = 'False' \n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>correct_nocancel</th>\n",
       "      <th>wrong_nocancel</th>\n",
       "      <th>wrong_cancel</th>\n",
       "      <th>correct_cancel</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>42667</td>\n",
       "      <td>16670</td>\n",
       "      <td>37871</td>\n",
       "      <td>16969</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   correct_nocancel  wrong_nocancel  wrong_cancel  correct_cancel\n",
       "0             42667           16670         37871           16969"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_eval.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    0.719062\n",
      "dtype: float64\n",
      "0    0.309427\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(df_eval['correct_nocancel'] / (df_eval['correct_nocancel'] + df_eval['wrong_nocancel']))\n",
    "print(df_eval['correct_cancel'] / (df_eval['correct_cancel'] + df_eval['wrong_cancel']))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright 2021 Google Inc. Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
   ]
  }
 ],
 "metadata": {
  "environment": {
   "kernel": "python3",
   "name": "tf2-gpu.2-8.m90",
   "type": "gcloud",
   "uri": "gcr.io/deeplearning-platform-release/tf2-gpu.2-8:m90"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
